From the uDemy course on LLM engineering.
https://www.udemy.com/course/llm-engineering-master-ai-and-large-language-models
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
475 lines
17 KiB
475 lines
17 KiB
WEBVTT |
|
|
|
00:01.160 --> 00:12.980 |
|
Colabに戻り、 Colabノートの7週目、 5日目を見ている。 |
|
|
|
00:12.980 --> 00:18.260 |
|
今日はトレーニングではなく、 推論をするのだから、 必要なのはそれだけだ。 |
|
|
|
00:18.590 --> 00:22.070 |
|
ええと、 トレーニングはまだこの別のタブで行われています。 |
|
|
|
00:22.070 --> 00:30.890 |
|
今話しているように、 まずインストールから始めて、 それから通常のインポートをいくつかする。 |
|
|
|
00:30.890 --> 00:34.190 |
|
そして、 ここにある定数についてお話ししましょう。 |
|
|
|
00:34.340 --> 00:39.380 |
|
ええと、 ベースモデルはもちろんラマ3。 1 プロジェクト名は、 抱きつき顔の使い手、 プライザー。 |
|
|
|
00:39.380 --> 00:41.450 |
|
だから、 ここで選んで、 入れることができる。 |
|
|
|
00:41.480 --> 00:47.480 |
|
さて、 あなたの名前を入れて、 あなたが微調整してハグハブにアップロードしたモデルに対して、 この推論、 |
|
|
|
00:47.480 --> 00:50.960 |
|
このテストを実行してくれることを願っている。 |
|
|
|
00:51.140 --> 01:03.680 |
|
しかし、 あなたが、 あー、 我慢の限界に達したか、 あるいは私のものがどうだったかを見たいだけという可能性もある。 |
|
|
|
01:03.680 --> 01:06.980 |
|
だから、 このモデルとも対戦できるだろう。 |
|
|
|
01:07.430 --> 01:10.460 |
|
ええと、 ここでランの名前を選択しました。 |
|
|
|
01:10.460 --> 01:11.210 |
|
これはランの名前である。 |
|
|
|
01:11.210 --> 01:19.220 |
|
そこにある39番は、 私が過去に何度もエポックに走ったものの、 抱き合わせのランネームだとお分かりになるかもしれない。 |
|
|
|
01:19.430 --> 01:25.940 |
|
ええと、 このリビジョンは、 どのチェックポイントを選択するかを指定するところです。 |
|
|
|
01:25.940 --> 01:29.720 |
|
ひどくオーバーフィットし始める前のものを選んでいる。 |
|
|
|
01:29.780 --> 01:34.640 |
|
うーん、 これはまだいい、 いい結果を出している方だった。 |
|
|
|
01:35.150 --> 01:39.200 |
|
そして、 これが私の微調整モデルの名前になる。 |
|
|
|
01:39.200 --> 01:40.880 |
|
もちろん、 ハグ顔の名前である。 |
|
|
|
01:40.880 --> 01:41.270 |
|
ごめんなさい. |
|
|
|
01:41.270 --> 01:42.590 |
|
これを作らないといけない。 |
|
|
|
01:43.190 --> 01:45.080 |
|
そうでなければ、 ここに自分の名前をハードコーディングする。 |
|
|
|
01:45.080 --> 01:49.220 |
|
でも、 私がやることは、 これの2つのバージョンを作ることだ。 |
|
|
|
01:49.220 --> 01:55.340 |
|
ひとつは、 あなたがエントリーした抱きつきフェイスのユーザー用。 |
|
|
|
01:59.120 --> 02:14.500 |
|
もうひとつはコメントアウトして、 私のモデルを使う場合はこの行をコメントアウトしないようにします。 |
|
|
|
02:16.810 --> 02:24.100 |
|
それから、 もしあなたが自分のモデルを使うのであれば、 ラン名とリビジョンをあなたが使っているものに合わせて変更する必要がある。 |
|
|
|
02:24.100 --> 02:27.340 |
|
そして、 リビジョン・イコール・ノーンを入れないことから始めればいい。 |
|
|
|
02:27.730 --> 02:36.610 |
|
リビジョンをまったく使わないのであれば、 リビジョン・イコール・ノーだ。 |
|
|
|
02:36.610 --> 02:45.550 |
|
そして、 データセットについては......いずれにせよ、 あなたが注意深く、 愛情を込めてキュレーションし、 Huggingfaceのハブにアップロードしたデータセットを読み込みます。 |
|
|
|
02:45.700 --> 02:49.420 |
|
私のものを使ってもいいよ。 |
|
|
|
02:49.690 --> 02:55.630 |
|
さて、 ところで、 もしあなたがこれの廉価版を使って、 家電製品だけのモデルをトレーニングしたのであれば、 |
|
|
|
02:55.630 --> 03:01.170 |
|
もちろん、 あなたが構築した軽いデータセットと家電製品用のモデルを埋めれば、 |
|
|
|
03:01.200 --> 03:08.700 |
|
同じような結果が得られるはずです。 |
|
|
|
03:09.630 --> 03:11.520 |
|
クオンツ・フォー・ビットは真実だ。 |
|
|
|
03:11.550 --> 03:19.410 |
|
量子化し、 カラフルな線を出力する方法を覚えているだろう。 |
|
|
|
03:19.740 --> 03:20.280 |
|
オーケー。 |
|
|
|
03:20.310 --> 03:22.290 |
|
そして、 ハグをするためにログインする。 |
|
|
|
03:22.680 --> 03:24.090 |
|
もう慣れただろう。 |
|
|
|
03:24.240 --> 03:27.000 |
|
トレーニングをしているわけではないので、 ウェイトやバイアスに記録する必要はない。 |
|
|
|
03:27.000 --> 03:29.400 |
|
そしてデータセットをロードする。 |
|
|
|
03:29.400 --> 03:36.030 |
|
それに、 この時点で最初のトレーニング・データセットを見れば、 もうそれを使うことはないだろう。 |
|
|
|
03:36.030 --> 03:38.790 |
|
しかし、 その値段は織り込み済みだ。 |
|
|
|
03:38.820 --> 03:39.750 |
|
こんな感じだ。 |
|
|
|
03:39.780 --> 03:44.640 |
|
もちろん、 テストデータセットを使用する。 |
|
|
|
03:44.640 --> 03:46.800 |
|
本文には価格が書かれていない。 |
|
|
|
03:46.800 --> 03:50.940 |
|
値段は、 モデルに与えられない答えの中にしかない。 |
|
|
|
03:50.940 --> 03:54.060 |
|
この文章も与えられただけだ。 |
|
|
|
03:54.090 --> 04:04.420 |
|
この予測を実際に行う部分に入ったら、 すぐにトリプルチェックをすることができますよ」。 |
|
|
|
04:04.690 --> 04:06.010 |
|
でも、 私たちは違う。 |
|
|
|
04:06.070 --> 04:13.300 |
|
それではまず、 トークン・サイザーと微調整したモデルをロードしましょう。 |
|
|
|
04:13.300 --> 04:17.110 |
|
そこでまず、 適切な量子化を選ぶ。 |
|
|
|
04:17.140 --> 04:19.180 |
|
以前と同じでおなじみだろう。 |
|
|
|
04:19.210 --> 04:21.370 |
|
これも以前と同じだ。 |
|
|
|
04:21.490 --> 04:22.960 |
|
まあ、 ここだけ少し違う。 |
|
|
|
04:22.960 --> 04:24.460 |
|
しかし、 我々はトークナイザーを読み込む。 |
|
|
|
04:24.460 --> 04:28.540 |
|
パラメータを設定するために、 定型文を入れたんだ。 |
|
|
|
04:28.540 --> 04:33.850 |
|
先ほどと同じように、 右クオンツのコンフィグを使ってベースモデルをロードする。 |
|
|
|
04:33.880 --> 04:36.070 |
|
そして、 またあの一発ギャグが飛び出した。 |
|
|
|
04:36.070 --> 04:39.280 |
|
そしてこれが新しい。 |
|
|
|
04:39.280 --> 04:42.850 |
|
だから今、 左モデルというものをロードしている。 |
|
|
|
04:43.090 --> 04:46.510 |
|
覚えていれば、 パラメーターの効率的な微調整を意味する。 |
|
|
|
04:46.510 --> 04:51.850 |
|
ローラをコード化したパッケージの名前だ。 |
|
|
|
04:52.120 --> 04:57.850 |
|
つまり、 左のモデルは、 ベースがあるモデルを表す抱き合わせの顔のモデルなんだ。 |
|
|
|
04:57.850 --> 05:01.190 |
|
そして、 ベースの上にアダプターを装着する。 |
|
|
|
05:01.760 --> 05:02.990 |
|
だから、 それを積み込むんだ。 |
|
|
|
05:03.020 --> 05:05.090 |
|
今はフロンプレーンと呼んでいる。 |
|
|
|
05:05.090 --> 05:11.930 |
|
そして、 上で設定したベースモデル、 微調整したモデル名を渡すことができる。 |
|
|
|
05:11.930 --> 05:13.820 |
|
そして、 希望があれば修正もする。 |
|
|
|
05:13.820 --> 05:17.780 |
|
もしリビジョンがNULLでなければ、 それを渡す。 |
|
|
|
05:17.780 --> 05:20.570 |
|
そうでなければ、 わざわざパスする必要はない。 |
|
|
|
05:21.140 --> 05:26.570 |
|
そうすれば、 微調整したモデルがロードされる。 |
|
|
|
05:26.570 --> 05:28.670 |
|
そして最後に、 メモリのフットプリントを表示する。 |
|
|
|
05:28.700 --> 05:35.900 |
|
メモリフットプリントが5だったことを覚えているだろうか。 以前は6GBだったが、 今は5GBだ。 7. |
|
|
|
05:35.930 --> 05:44.930 |
|
ラウラ・アダプターの100MBか109MBが追加されているから5700MBだ。 |
|
|
|
05:45.020 --> 05:48.950 |
|
ローラAとローラBがそこにいる。 |
|
|
|
05:49.070 --> 05:53.540 |
|
ええと、 もう一回、 この微調整されたモデルをプリントすればいいんだ。 |
|
|
|
05:53.540 --> 05:56.750 |
|
この記事を書いたのは1週間前のことだ。 |
|
|
|
05:56.750 --> 06:01.480 |
|
2日目、 僕が未来を見ていると言ったのは、 僕がこれを使っていたからなんだ。 |
|
|
|
06:01.480 --> 06:04.120 |
|
このモデル自体は私たちが見たものだ。 |
|
|
|
06:04.120 --> 06:05.620 |
|
そして、 このように見える。 |
|
|
|
06:05.620 --> 06:10.630 |
|
これを覚えておくと、 ニューラルネットワークのさまざまなレイヤーをすべて見ることができ、 |
|
|
|
06:10.630 --> 06:17.830 |
|
これらのレイヤー、 つまり張力レイヤーに到達すると、 そこにドロップアウトレイヤーがあることがわかる。 |
|
|
|
06:17.830 --> 06:20.860 |
|
今、 あなたは10%の確率でドロップアウトすることをすべて知っている。 |
|
|
|
06:20.860 --> 06:25.240 |
|
それにローラAとローラBもいる。 |
|
|
|
06:25.480 --> 06:34.690 |
|
ローラAとローラBは、 適応されたすべてのレイヤー、 つまりターゲット・モジュールのものだ。 |
|
|
|
06:34.690 --> 06:50.740 |
|
この層は、 ロジット、 つまり、 ボキャブ・トークン・ボキャブ・エントリーの可能性のある各数値を出力し、 |
|
|
|
06:50.740 --> 07:01.540 |
|
次のトークンの確率を予測するためにソフトマックスに入る。 |
|
|
|
07:02.560 --> 07:03.670 |
|
分かった。 |
|
|
|
07:04.360 --> 07:05.320 |
|
準備はできているか? |
|
|
|
07:05.590 --> 07:09.520 |
|
だから、 推論を実行するんだ。 |
|
|
|
07:09.610 --> 07:21.100 |
|
ええと、 ええと、 もう1回、 簡単に、 ええと、 GPT4ゼロが76ラマ3ドルになったことを覚えておいてください。 |
|
|
|
07:21.100 --> 07:21.100 |
|
ベースモデル1台。 |
|
|
|
07:21.100 --> 07:24.670 |
|
この未経験モデルは396ドルだった。 |
|
|
|
07:24.670 --> 07:25.900 |
|
非常に残念だ。 |
|
|
|
07:26.140 --> 07:36.370 |
|
ええと、 この人間は127を、 ええと、 僕のエラーとして、 ええと、 ラマが人間に勝てるかどうかとても期待しているんだ。 |
|
|
|
07:36.670 --> 07:43.090 |
|
オープンソースのモデルとして重要なのは、 何かおかしなことを期待しているかもしれないが、 |
|
|
|
07:43.090 --> 07:51.430 |
|
物価は変動が激しいということを念頭に置いておくことだ。 |
|
|
|
07:51.430 --> 07:57.250 |
|
ある商品が値下げされたかどうかはわからない。 |
|
|
|
07:57.250 --> 08:04.860 |
|
そのため、 これらの製品の価格には当然大きなばらつきがある。 |
|
|
|
08:04.860 --> 08:07.290 |
|
これは非常に難しい挑戦だ。 |
|
|
|
08:07.290 --> 08:10.350 |
|
そんなに難しくないと思うかもしれない。 |
|
|
|
08:10.350 --> 08:11.190 |
|
とても難しいことだ。 |
|
|
|
08:11.220 --> 08:12.840 |
|
自分で試してみればわかる。 |
|
|
|
08:13.320 --> 08:14.820 |
|
うーん、 わかった。 |
|
|
|
08:14.970 --> 08:17.040 |
|
そのことを念頭に置いて、 話を続けよう。 |
|
|
|
08:17.040 --> 08:23.820 |
|
つまり、 価格を抽出する関数は、 文字列を受け取り、 価格がドルであるかどうかを調べます。 |
|
|
|
08:23.820 --> 08:34.410 |
|
そして、 もう一回、 それ以降のどの時点に来る数字も見つける。 |
|
|
|
08:34.410 --> 08:47.160 |
|
値段は1ドルで、 8ドル、 9ドル、 99ドルとか、 何でもいい。 |
|
|
|
08:47.490 --> 08:48.870 |
|
ああ、 わかってもらえたと思うよ。 |
|
|
|
08:48.990 --> 08:51.060 |
|
ええと、 それが抜き取り価格なんだ。 |
|
|
|
08:51.240 --> 09:01.670 |
|
それから、 これはモデル予測関数で、 前に使った関数です。 |
|
|
|
09:01.940 --> 09:04.460 |
|
うーん、 それはマスクに気を取られるね。 |
|
|
|
09:04.460 --> 09:06.980 |
|
さっき言ったのは、 それを避けるために使うものかい? |
|
|
|
09:06.980 --> 09:12.440 |
|
警告を投げ、 入力プロンプトの大部分を予測する必要がないことを明確にする。 |
|
|
|
09:12.890 --> 09:20.570 |
|
そして、 微調整されたモデルで、 入力を渡して、 出力を生成する。 |
|
|
|
09:20.600 --> 09:29.270 |
|
このアテンション・マスクを渡すと、 新しいトークンは3つまでしか必要ない。 |
|
|
|
09:29.270 --> 09:33.530 |
|
でも、 万が一、 ひどいミスをしたときに、 |
|
|
|
09:33.560 --> 09:40.700 |
|
そのミスを捕捉できるように、 もう少し入れておく。 |
|
|
|
09:41.150 --> 09:46.580 |
|
さて、 たまたまだが、 私たちはこの予測関数よりもう少し良いものを作ることができる。 |
|
|
|
09:46.580 --> 09:48.770 |
|
これはまったく大きな違いではない。 |
|
|
|
09:48.770 --> 09:58.010 |
|
しかし、 しかし、 このモデルをこれだけコントロールできるようになったのだから、 次のトークンの扱い方をもう少しスマートにすることができる。 |
|
|
|
09:58.010 --> 09:59.720 |
|
それで、 この関数を書いたんだ。 |
|
|
|
09:59.720 --> 10:02.150 |
|
これは改良されたモデル予測機能だ。 |
|
|
|
10:02.150 --> 10:06.320 |
|
改善されたモデルは......うーん、 そうだね。 |
|
|
|
10:06.350 --> 10:09.110 |
|
ただ、 もう少し複雑なんだ。 |
|
|
|
10:09.290 --> 10:18.230 |
|
だから、 ええと、 ええと、 簡単に説明するけど、 超重要なことではないんだ。 |
|
|
|
10:18.230 --> 10:27.260 |
|
次のトークンの中から最も可能性の高いものを選ぶのではなく、 次のトークンの中から最も可能性の高い3つのトークンを選ぶのだ。 |
|
|
|
10:27.500 --> 10:30.830 |
|
そして、 この3つの確率は? |
|
|
|
10:30.830 --> 10:32.390 |
|
そしてそれらは実数を表している。 |
|
|
|
10:32.390 --> 10:42.050 |
|
例えば、 100ドルの価値がある可能性が非常に高く、 99ドルの可能性は少し低いが、 101ドルの可能性はかなり高いと言ったかもしれない。 |
|
|
|
10:42.230 --> 10:43.760 |
|
しかし、 100が最高だった。 |
|
|
|
10:43.850 --> 10:47.060 |
|
そして、 これら3つの数値の加重平均を取る。 |
|
|
|
10:47.060 --> 10:52.310 |
|
そしてそれは、 何を予測しようとしているのかをもう少し正確に知るための方法なんだ。 |
|
|
|
10:52.490 --> 10:57.770 |
|
そして、 必ずしも整数ではない何かを予測することができる。 |
|
|
|
10:58.000 --> 11:01.480 |
|
僕が使ってきたテクニックなんだ。 |
|
|
|
11:01.480 --> 11:07.300 |
|
回帰問題を分類問題として扱っているという事実を解決するようなものだ。 |
|
|
|
11:07.360 --> 11:13.420 |
|
これを知っていることは超重要ではないが、 しかし、 上記の関数を使っても大差はない。 |
|
|
|
11:13.450 --> 11:14.800 |
|
ちょっとした違いだ。 |
|
|
|
11:15.010 --> 11:20.260 |
|
しかし、 ニューラルネットワークの最後の層に興味があるのであれば、 |
|
|
|
11:20.290 --> 11:27.670 |
|
これに目を通す価値があるかもしれません。 なぜなら、 私がしていることは、 入力に渡す微調整モデルの出力を取ることであり、 |
|
|
|
11:27.670 --> 11:38.860 |
|
これらはトークナイザーの可能な語彙エントリすべてにわたって、 このベクトルで述べたロジットとみなされるからです。 |
|
|
|
11:38.860 --> 11:43.180 |
|
そして、 それを確率に変換するためにソフトマックスを呼び出す。 |
|
|
|
11:43.180 --> 11:46.270 |
|
そして、 トップ3を通過する。 |
|
|
|
11:46.270 --> 11:51.490 |
|
そして、 これは上位3人の加重平均を取っただけのものだ。 |
|
|
|
11:51.610 --> 11:54.400 |
|
これは加重価格であり、 加重価格を合計したものである。 |
|
|
|
11:54.400 --> 11:56.050 |
|
そして、 それが返ってくる。 |
|
|
|
11:56.050 --> 11:58.660 |
|
だから、 モデル予測にとても似ている。 |
|
|
|
11:58.660 --> 12:05.260 |
|
ただ、 一番上の予想だけでなく、 上位3つの予想に基づいた、 少し正確な答えを出すだけだ。 |
|
|
|
12:05.890 --> 12:09.100 |
|
ええと、 それでクラスのテスターがいるんだ。 |
|
|
|
12:09.100 --> 12:12.700 |
|
これは以前使ったのとまったく同じテスター・クラスだ。 |
|
|
|
12:12.940 --> 12:21.250 |
|
ええと、 その前に申し上げたこと、 これは明らかに全体の核心であることを指摘しておく価値がある。 |
|
|
|
12:21.250 --> 12:28.780 |
|
渡された関数を呼び出すと、 渡されたのはデータ・ポイントに関連するテキストだけである。 |
|
|
|
12:28.810 --> 12:30.730 |
|
当然、 値段は言わない。 |
|
|
|
12:30.730 --> 12:35.800 |
|
知っているのはテキストだけで、 価格については何も知らない。 |
|
|
|
12:35.800 --> 12:37.330 |
|
もちろんだ。 |
|
|
|
12:37.720 --> 12:45.610 |
|
そして、 改良された関数を使用するテストを呼び、 テストに合格すると、 |
|
|
|
12:45.610 --> 12:57.070 |
|
ある種のソープオペラのように、 次のビデオでこの結果をお伝えします。 |
|
|
|
12:57.100 --> 12:58.540 |
|
そこで会おう。
|
|
|