さて､ グーグルコラボに再びやってきた｡
ここに来るのは久しぶりだが､ おかえりなさい｡
あー､ 今週はここで過ごすことになるんだけど､ すごいことになりそうだよ｡
実際､ これまでで最高の週になりそうだ｡
何度も言うようだが､ 今回は本当に､ ピークがピークになりそうだ｡
ここでやっていることより良くなりそうなのは､
来週の第8週だ｡
だが､ 集中を切らさずに7週目を続けてくれ｡
ここには通過しなければならないことがたくさんある｡
だからまず､ そうしよう｡
この週7日目のコラボをセットアップした｡
まずはインストールから始めよう｡
PeftはParameter Efficient
Fine Tuningの略で､ ローラを含むライブラリの名前だ｡
この図書館の中にあるんだ｡
プッ､ プッ｡
舌を巻く｡
ええと､ それで終わりです｡
私は､ GPUボックスの中で最も低いT4ボックスを使用しており､ 15ギガバイトのGPUラムを搭載しているだけだ｡
見てわかるように､ ほんの数セルを入れただけで､ そのほとんどをすでに使い切っている｡
とにかく､ 僕らはピップをインストールするんだ｡
ここではたくさんのインポートを行い､ いくつかの定数を設定する｡
ベースモデルはラマ3だ｡ 180億ドル
そして､ 私はここで微調整モデルも設定している｡
まだ微調整はしていない｡
私は｡
これは未来から来たものだ｡
ラウラ・マトリックスがターゲット・モジュールに適用されるファインチューニング・モデルがどのようなものかをお見せするために持ってきたんだ｡
そして､ ここに3つのハイパーパラメーターがある｡
8から始めて16､ 32と言ったのを覚えているだろう｡
32歳まで来たよ｡
結局､ そこに行き着いたんだ｡
それで､ ここで32をやっているんだ｡
ええと､ アルファは経験則で､ ダブルRだ｡
それで64点だ｡
そしてターゲット・モジュール｡
これが､ 私たちがターゲットにしている4つのレイヤーの名前だ｡
その理由はすぐにわかるだろう｡
そして､ これがラマ・モデルの最も一般的なセットアップだ｡
他のモデルではレイヤーの名前が違うかもしれないが､ そう､ ターゲットモジュールに割り当てるこのリストに､
ターゲットとするレイヤーの名前を与えるのだ｡
オーケー｡
次に､ これはハギング・フェイスにログインするために何度かやったことのある標準的なものだ｡
ええと､ もしあなたがハグする顔のアカウントを持っていないなら､ もちろんあなたは今頃ハグする顔のアカウントを持っているでしょう､
といういつもの宣伝文句があります｡
でも､ そこでログインして､ 無料だし､ トークンももらえるし､ それからColabのこのセクションに行って､
キーというのを使って､ トークンを入れるんだ｡
そうすれば､ このセルを走らせれば､ ハギング・フェイスにログインできる｡
トークンを入力することもできる｡
ノートブックへのアクセスに問題がある場合｡
さて､ それでは早速､ ベースモデルを量子化せずに読み込んでみよう｡
おかしなことはしない｡
ラマ3世を全部読むだけだ｡ 180億円のベースモデルは､ リャマ・シリーズの最小モデルであることを忘れてはならない｡
ええと､ デバイス・マップ・イコール自動というのは､ GPUがあればそれを使うということです｡
そして､ 私は今これを実行するつもりはない｡
ええと､ GPUに全部は入りきらないという警告が出たんだ｡
だから､ その一部がCPUに使われたんだ｡
右側のリソースを見ると､ GPUは15ギガのうち11ギガが埋まっていて､
ラムも13ギガ近く埋まっている｡
だから､ ここでの急上昇の理由は､ 一度やって､ 再開してまたやったからだ｡
ええと､ これを実行すると､ 明らかに1がトップに上がるのが見えるだけです｡
オーケー｡
では､ このベースモデルのメモリ使用量をプリントしてみよう｡
そしてまた､ もしこれをトレーニングしようと思ったら､ 何度も何度も何度も何度も何度も何度も何度も何度も何度も何度も何度も何度も何度も何度も何度も何度も何度も何度も何度も何度も｡
これは､ ベースモデルがどれだけのメモリーを使用しているかということであり､ そのメモリーのフットプリントは32GBのすぐ北にあり､
32GBのメモリーが使用されている｡
以前､ 私たちがそう言ったことを覚えているだろう｡
基本的には､ 80億の各パラメーターに対して32ビットの浮動小数点数だ｡
オーケー｡
だから､ それは大きいんだ｡
ええと､ ちょっと見てみましょう｡
ベースモデルそのものをプリントして見ることができる｡
そして､ これは今､ どんな風に見えるかというと､ うーん､ 前に簡単に書いたけど､ ちょっと小休止｡
繰り返しになるが､ これは深く理論的な授業になるつもりはないので､ できることを言う以外にはあまり説明するつもりはない｡
このニューラルネットワークのアーキテクチャーを見れば明らかなように､
まず埋め込み層がある｡
つまりこれは､ 前に話したLMSをエンコードするエンコーダーのようなものだ｡
最初の層は､ トークンumをベクトルumに埋め込む｡
実際､ これが可能なトークンの数の次元なんだ｡
そして､ これが埋め込まれたベクトルの次元数である｡
そのため､ ラマ・デコーダー・レイヤーと呼ばれる32のレイヤーが存在する｡
32セットだ｡
そして､ その32人はそれぞれこのように見える｡
それを正しく伝えよう｡
このレイヤーは､ q､ proj､ k proj､ v､ o projと呼ばれるアテンション・レイヤーのセットで構成されています｡
そしてこれらのレイヤーは､ ターゲット・モジュールでターゲットにしたレイヤーである｡
他の方法も試すことができるが､ これが最も一般的な方法だ｡
そして､ これらのレイヤーのいくつかは､ 4000の奇妙な寸法が出たり入ったりしているのがわかるだろう｡
ええと､ これとこれと､ いくつかは4000人入って1000人出ている｡
だから､ 彼らには次元の違うものがある｡
そしてそれは､ ローラAとローラBを見るときに多少関係してくる｡
しかし､ 私はこのことについてあまり深入りするつもりはない｡
そして多層パーセプトロン層があり､ 例えば､ アップは次元数を爆発的に増やし､
ダウンは次元数を減らす｡
そしてその後に活性化関数が続く｡
繰り返しになるが､ こういうことに詳しい人たちのために｡
Lamaに使われている活性化関数はSeluで､ PyTorchのドキュメントで見ることができる｡
それを見て､ それが何なのか､ なぜ使われるのか､ もっと詳しく知ることができる｡
ええと､ だから､ その後にレイヤー・ノルム・レイヤーが続く｡
そして一番最後にLMヘッドという直線的な層がある｡
そして､ これは時に標的にされる｡
これはターゲットモジュールに追加されることもある｡
前にも述べたように､ 何かを生成したい場合､ 学習させたいことの一部が結果を生成することである場合､
それは何らかの別の形式を取ることになる｡
JSONの特定の構造が必要かもしれないし､ まったく別のものが必要かもしれない｡ たとえば､
別の言語を話させたいとか､ 非常にユニークな方法で物事を構造化させたいとか｡
それなら､ ターゲットとするモジュールでも､ これをターゲットにするかもしれない｡
うーん､ でもこれで建築の雰囲気はわかるよね｡
そしてすぐに､ ローラのアダプターを見れば､ なぜ私がこのことに時間を割いたのかがわかるだろう｡
分かった｡
それで32GBを使い切った｡
次に必要なのは､ このセッションを再起動することだ｡ ランタイムからセッションの再起動を実行し､ メモリーをクリアにして続行できるようにする｡
キャッシュをクリアするトーチコマンドはいくつかあるが､ 実際には十分な攻撃性はない｡
私たちが多くのものを消費してきたせいで､ まだ多くのものを抱えている｡
今はセッションを再開するしかない｡
だから､ そうするつもりだ｡
また次のビデオでお会いしましょう｡