Windows今春、8GBの環境で生成AIがどこまで動くのかを模索していた*1。パフォーマンスを気にしなければ、GPTだろうがDiffusionだろうが、GPUの無いRAM=8GBの環境、PCでもAndroidスマートフォンでも動作はするのだ。推論であれば、という条件付きだった。誰かが提供してくれる小規模なモデルを用いる前提であり、そのモデルに独自の情報を付与する強化学習に対応することは現実的ではなかった。そのような現状に微かな希望をもたらしてくれたのが、llama2.cだった。Karpathy氏による週末のクリエイティブな活動は、学習モデルの小規模さから、推論だけでなく強化学習までもRAM=8GBの環境で実行できるのだ。実用的なところは置いて、モデルの生成から、そのモデルを用いた推論まで、一連の流れをRAM=8GBの環境で追体験してみた。この投稿は、その手順と記録だ。推論の実行については、LinuxでもWindowsでも簡単に実行できる。モデルの生成について、Windowsでの実行は難しい。以下のような障害がある。プログラムから呼び出されるシェル・スクリプトの書き直し学習データ・テキストのエンコード対応sentencepieceのWindows用ビルド学習データのコンパイル→torch.compileがWindowsに対応していないWindowsについては、推論エンジンの初回実行のみ取り上げる。前提この投稿では、次の環境を用いている。3.11.4この投稿では、次のフォルダ構成を前提としている。~/work/sentencepiece推論エンジンのビルド、実行まず作業フォルダに移動し、llama2.cのレポジトリをローカル環境に保存する。https://github.com/karpathy/llama2.c.git生成されたllama2.cフォルダに、学習済みモデル"stories15M.bin"をダウンロードする。Studio、あるいはC++ビルドツールをインストールしておく必要がある。インストール方法は過去の投稿で紹介している。Windowsを対象とした、いずれかのページを参照してほしい。PowerShell"から次のコマンドを実行する。推論のパフォーマンスは300トークン/秒程度なのが分かる。物語の生成はランダムのようではあるが、インストラクションを与えた場合には、それに関連するような物語を生成していることも分かる。ディストリビューションに依存する設定、作業はないため、他のディストリビューションでも共通に機能するはずだ。Windows同様、実行ファイルを生成し推論を実行する。"runomp"を指定しているのは、並列処理に対応するためだ。"Python環境の準備、sentencepieceの導入ここからの話題はLinuxのみを対象とする。各種Pythonスクリプトの実行、並びにsentencepiece*3を導入するための環境を作成する。sentencepieceはデータの前処理に用いられる。その実行ファイル、ライブラリは次のフォルダへ格納される。/usr/local/lib64環境によっては、ライブラリ・フォルダのパスを通しておく必要がある。環境変数として設定を永続化するために、「~/.config/environment.d/envvars.conf」*4にも追記しておくとよい。LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib64機械学習:前処理GitHubの「training」で示されているコマンドを実行することによって、推論エンジンの実行でダウンロードしたstories15M.binを生成できるのだという。その生成にはクラウド環境のGPU4台で並列処理して、1日を要している。tokenizer」で示されているコマンドを実行する。i5で一連の作業を実施したところ、30分ほどを要した。size)として32000が指定されていた。tokenizer」では、代わりに4096が指定されている。語彙サイズが大きいほど、モデルの精度は向上するものの、用途によってはオーバースペックな場合もある。適切な精度が期待できる、限られた語彙サイズを追求し、指定することで、モデルはより小さくなり、結果として推論処理が高速になる。download”を実行すると、”TinyStories_all_data.tar.gz”がダウンロードされる。該当コマンドを実行せず、”tinystories.py”に記述されたURLから直接ダウンロードしても良い。その場合、件のファイルを展開し、収録されている全てのjsonファイルを次のフォルダへ収納しておく必要がある。~/work/llama2.c/data/TinyStories_all_data機械学習:モデルの生成スワップの生成モデルを生成する前に、機械学習環境を整えておく。RAM=8GBの環境では、モデル生成中にRAMが不足し、プロセスが強制終了されてしまう。それを回避するために、8GBのスワップを生成しておく。機械学習処理を担う「train.py」には、多数のパラメータが用意されている。パラメータの調整は、動作不良や実行エラーに通じるリスクを伴う。この投稿では、実用面は犠牲にして、モデル生成処理のループ回数と時間が現実的なものとなるよう、次のようにパラメータを編集している。10「compile」をTrueにすることで、PyTorchがモデルをコンパイルする。これによって、より高速なモデルを生成することができる。3.11に対応していない。この問題を回避するため、ここではFalseとしている。「device」を"cpu"とすることで、GPUのない環境でもモデルを生成できるようにした。「eval_interval」「max_iters」「warup_iters」は、モデル生成のループ処理制御とモデル生成に関連している。具体的には、次のループ処理だ。version=0)デフォルトでは、「max_iters=100000」回の処理をすることになる。i5で処理すると、1回の処理につき、約4.5秒を要する。10万回を終えるには、5日程度を要することになる。これを1時間半程度にとどめるべく、「max_iters=1000」とした。するとデフォルトの「eval_interval=2000」では、if文のネストを全回避することになる。そこで20回に一度、if文のネストを辿れるよう「eval_interval=20」とした。次の処理で0除算を回避するため、「warup_iters=10」としている。warmup_iters)その他のパラメータは、強化学習の特性に影響を与える部分だ。次の引用で言及されている様に、論文に掲載されているテーブルを参照して調整する必要がある。paper強化学習ここまでの編集を終えたら、次のコマンドを実行する。i5での実行時間は約90分だった。実行中のhtopを確認すると、一見RAM=8GBでも余裕がありそうに見えるが、前述の如くkilledを経験しており、処理のどこかでRAM容量が逼迫するタイミングがある。--vocab_size=4096この投稿では実行しないが、”train.py”は過去のトレーニングを引き継いで、再開実行することができる。10万回のループ、5日間分の処理だとしても、チェックポイントの出力ごとに処理を中断し、最新のチェックポイント以後のループから再開する、といった対応ができる。そのためにはパラメータを次のように編集する必要がある。resume処理が完了すると、「~/work/llama2.c/out」に、モデルとチェックポイントが生成される。"stories15M.bin"のサイズ57.9MBに対して、新しく生成されたモデルのサイズは28.7MBだ。このモデルを用いて実行すると、単位時間当たりの処理トークン数が400強/秒と、パフォーマンスが向上していることが分かる。同時に、英語の文章が稚拙になっており、指定したインストラクションも機能していないに等しいことが確認できる。全てはモデル生成の学習回数次第なのだ。data/tok4096.bin余談:独自データを用いたモデル生成、JSONファイルの構成"stories15M.bin"はショートストーリー的な140MBのテキスト、50ファイル分を学習したモデルだ。このテキストがカスタマー・サポートの問答だったらどうだろう*5。ローマ五賢帝の一人、マルクス・アウレリウス・アントニウスの自問自答をまとめた『自省録』だったら。汎用的な対話形式を前提としなくとも、何か使い道のありそうなモデルが生成できるのではないだろうか。”TinyStories_all_data.tar.gz”に収録されているjsonファイルは、1行のテキストで構成されている。その1レコードは、次のような構成だ。"GPT-4"},つまり、このような構造の独自データを強化学習に用いることで、独自のデータに基づいたモデルを生成することができる。今回の投稿で紹介した程度には、RAM=8GBの環境でも強化学習を体験することができる。ChatGPTをはじめとする生成AIサービスが対話形式だからと言って、言語モデルを用いた全てのサービスがそうである必要はないし、そのようなサービスのように汎用的である必要もない。そのようなことを考えると、llama2.cは結構な夢を見させてくれる存在だと思うのだ。simu...15日、OpenAIは動画生成モデル、Soraを発表した。プロンプトと...2023-09-1320230912https://www.tumblr.com/espio999/728265895929167872/%E3%81%B...2023-09-10大規模言語モデルは新たな知能かChatGPTが発表されて以降、どのような計算によって、生成が可能...2023-08-2220230821https://www.tumblr.com/espio999/29691167985/%E8%88%AC%E8%8B...2023-07-1020230709明日から夏本番。予想気温では、午前8時に30度到達。TOGAFTumblrはてなブログをはじめよう!espio999さんは、はてなブログを使っています。ブログを報告する引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。