WEBVTT 00:00.680 --> 00:08.750 だから将来的には、 トレーニングをしてモデルを微調整し、 微調整したモデルを作るつもりだ。 00:08.750 --> 00:16.160 そして、 これからすることは、 未来に保存しておいたもののひとつをロードすることだ。 00:16.250 --> 00:21.230 そうすれば、 その建築物を見て、 感覚をつかむことができる。 00:21.320 --> 00:24.380 そして、 ベースモデルではなく、 ロードすることでそれを実現する。 00:24.440 --> 00:35.630 このような、 えーと、 えーと、 事前に訓練された因果LLMの自動モデルではなく、 事前に訓練されたパラメータ効率の良い微調整モデルであるPeftモデルである。 00:35.630 --> 00:39.350 そして、 今ここにあるのがベースモデルであることを伝える。 00:39.350 --> 00:40.760 そしてモデルを微調整する。 00:40.760 --> 00:44.570 このようにして保存したモデルの名前がこれだ。 00:44.570 --> 00:45.950 ローラの微調整 00:45.950 --> 00:48.920 どんな風に見えるかをお見せするためにやっているんだ。 00:48.950 --> 00:54.440 これは比較的小さいから、 すぐに終わるよ。 00:54.590 --> 00:56.870 サイズを見てみよう。 00:56.870 --> 01:02.270 そのため、 メモリフットプリントはギガバイトになる。 01:02.270 --> 01:06.170 そして、 それはこの件に非常に近いので、 あなたにも馴染みがあるはずだ。 01:06.320 --> 01:10.940 ええと、 その差は約100MBです。 01:10.940 --> 01:12.440 見てみよう。 01:13.250 --> 01:18.470 つまり、 これがこの製品のアーキテクチャーだ。 01:18.740 --> 01:22.340 今はもう、 そんな芸当はしない。 01:22.370 --> 01:24.530 これは以前見たものとは明らかに違う。 01:24.530 --> 01:26.360 そして、 私たちが見ていることをお話ししましょう。 01:26.360 --> 01:35.420 まず第一に、 ここまでの内容は、 32ラマ・デコーダーのレイヤーがあるところまでは同じです。 01:35.420 --> 01:49.340 そして今、 私たちはこの注目のレイヤーにたどり着き、 Qプロジ、 Kプロジ、 Vプロジ、 Oプロジのレイヤーがある。 01:49.340 --> 01:53.930 そして、 これらにはそれぞれベースレイヤーがある。 01:53.930 --> 01:57.410 そしてロラAとロラBがある。 01:57.500 --> 02:07.060 そしてこれが、 以前お話ししたA行列とB行列で、 ここに32番があります。 02:07.060 --> 02:11.260 それが先ほどのR、 ローラランクだ。 02:11.290 --> 02:14.050 これらは32ランクの行列である。 02:14.200 --> 02:16.270 うーん、 そうだね。 02:16.300 --> 02:24.160 行列の計算の仕方に詳しい方なら、 32の次元を掛け合わせることで、 このベースレイヤーに適用し、 02:24.160 --> 02:39.130 そのベースレイヤーにわずかなシフトを加えることができるように設計されているのがおわかりでしょう。 02:39.130 --> 02:45.760 理論に拘泥したいので、 また少し手垢がついているが、 これらは掛け合わされるということだ。 02:45.790 --> 02:46.720 ローラAとローラ 02:46.750 --> 02:53.890 Bにスケーリングファクターであるアルファを加えたものが、 適用するデルタとして使われる。 02:53.890 --> 02:59.890 このベースレイヤーの上に、 ドロップアウトと呼ばれる別のハイパーパラメーターがある。 03:00.010 --> 03:01.870 それについては後で話す。 03:01.870 --> 03:04.360 それは今週話したビッグ3のうちの一つではない。 03:04.990 --> 03:07.180 しかし、 ここではその特徴を何度か目にすることになるだろう。 03:07.180 --> 03:13.060 4つのターゲット・モジュールのうち、 03:13.060 --> 03:20.020 他のモジュールを見てみると、 ローラAとローラBがあり、 03:20.020 --> 03:36.430 ここにもローラAとローラBがある。 03:36.460 --> 03:42.400 Rのハイパーパラメータで指定された32次元だ。 03:43.510 --> 03:45.220 ええと、 他は何も変わっていない。 03:45.220 --> 03:48.880 多層パーセプトロン層もまったく同じである。 03:49.060 --> 03:51.130 うーん、 他は全部同じだよ。 03:52.090 --> 03:58.720 もう一度言っておくが、 私たちはこの件に拘泥しないようにしているが、 03:58.720 --> 04:07.720 この4つの行列の次元数がこれであることを納得するために振り返ってみるといい。 04:07.720 --> 04:14.530 それぞれにローラAとローラBがあり、 そのマトリックスの次元を掛け合わせることで、 04:14.530 --> 04:20.890 これらのアダプター全体でいくつの次元、 いくつのウェイトがあるかがわかる。 04:20.890 --> 04:25.210 そして各レイヤーについて、 この4つの数字を合計するということだ。 04:25.210 --> 04:31.990 モジュールのグループが32個あるので、 それを32倍する。 04:32.800 --> 04:37.120 そして、 これらのパラメーターはそれぞれ4バイトの数字である。 04:37.120 --> 04:38.350 32ビットだ。 04:38.350 --> 04:43.570 それでサイズを計算し、 それを100万で割ってメガバイトにする。 04:43.870 --> 04:48.580 ローラ・アダプタのウエイトをすべて合計すると、 04:48.580 --> 05:02.830 2700万個のパラメータがあり、 合計サイズは約109MBになる。 05:02.830 --> 05:07.190 つまり、 2,700万個のパラメータは、 100.9メガバイトのサイズということになる。 05:07.190 --> 05:10.730 それくらい私たちのアダプターは大きい。 05:11.030 --> 05:20.840 そしてもちろん、 llama全体が80億のパラメーターを持ち、 サイズが32GBであることと比較してほしい。 05:20.840 --> 05:33.290 多くのパラメータとトレーニングが必要だが、 ラマ3のような巨大なものに比べれば小さなものだ。 05:33.290 --> 05:33.290 1、 小さなバリエーションであっても。 05:33.290 --> 05:46.490 しかし、 このような低次元の行列を使うことで、 より大きなアーキテクチャに影響を与えることができるということを、 05:46.490 --> 06:00.320 直感的に理解していただければと思います。 06:00.680 --> 06:09.870 そして、 この109MBという数字が、 私が実際にハグすることができるパラメータのサイズであることを証明するものでもある。 06:09.900 --> 06:18.810 私は今、 ハグをしている。 そして、 あの特別なローラ・アダプター、 微調整されたモデルをどこに保存したか、 そして何を見つけるかを見ている。 06:18.810 --> 06:22.320 これらを見るとき、 セーフ・テンソルと呼ばれるものを探す。 06:22.320 --> 06:26.070 これは、 パラメーターそのものを保存するファイルである。 06:26.310 --> 06:31.530 そして、 ラマ3について見てみよう。 1、 32GBの大容量であることがわかるだろう。 06:31.530 --> 06:42.540 これを見ると、 パラメータが109MB、 109MBであることがわかる。 06:42.540 --> 06:49.830 それが、 このQラウラを使って微調整するパラメーターの大きさだ。 06:50.310 --> 07:01.470 少なくとも、 ここで何が起こっているのか、 そして最適化するために何GBものデータを必要とせずにモデルを微調整することができるというトリックをどのように使っているのか、 07:01.470 --> 07:05.250 きちんとした直感をつかんでいただけたと思います。 07:06.000 --> 07:09.720 ということで、 スライドに戻り、 まとめとしたい。