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.
 
 

655 lines
22 KiB

WEBVTT
00:00.440 --> 00:08.390
さて、 Jupyter Labにようこそ!このプラットフォームでの時間の壮大なフィナーレを飾ることになるだろう。
00:08.570 --> 00:14.540
そして、 この7週間を締めくくる素晴らしいものになるだろう。
00:14.600 --> 00:19.130
まず気づくのは、 8週目のフォルダーにはかなり多くのことが起こっているということだ。
00:19.130 --> 00:26.660
これは、 この大きな問題を解決するために、 私たちが多くの仕事をこなさなければならないという事実を反映している。
00:26.960 --> 00:31.010
つまり、 このコードを読み進めるにあたって、 いつもより速いペースで進むということだ。
00:31.010 --> 00:36.860
でも大丈夫、 この時点であなたはLLMエンジニアリングをマスターしているのだから。
00:36.860 --> 00:44.210
アシスタントのディクテットやユーザーのリストなど、 もはや私が長々と説明する必要はない。
00:44.210 --> 00:48.200
それはもう、 非常に古いニュースだ。
00:48.410 --> 00:54.770
ほんの数週間前まで、 トークンが何なのかを説明していたなんて。
00:54.770 --> 00:59.230
そして今、 あなたは大規模な、 完全なエージェントAI Iの準備ができている。
00:59.260 --> 01:02.830
始める前に、 簡単な管理上の注意点を説明しよう。
01:02.890 --> 01:07.480
パッケージを少し変更したんだ。
01:07.480 --> 01:14.650
この環境に依存するパッケージをいくつか追加した。
01:14.770 --> 01:20.950
つまり、 9月下旬以前にコードを取得した場合は、 私が追加した新機能を追加するために、 再度コードを取得し、
01:20.950 --> 01:26.380
パッケージを更新する必要があるかもしれないということだ。
01:26.380 --> 01:27.970
それはとても簡単なことだ。
01:28.000 --> 01:32.050
もちろん、 プロジェクトのホーム・ディレクトリに行けばいいだけだ。
01:32.050 --> 01:33.640
だからLMエンジニアリングだ。
01:33.760 --> 01:37.480
PCを使っているなら、 Anacondaプロンプトに入る必要があります。
01:37.720 --> 01:43.540
それからgit pullして最新のコードを取得し、 conda env updateを実行する。
01:43.780 --> 01:52.480
ええと、 ファイルをenvironmentとして指定します。 ymlとdash dash pruneは、 リストにもうないパッケージを削除するように指示する。
01:52.480 --> 01:57.400
私は何も削除していないと思うが、 とにかく、 これは常に賢明なあー、 ワンライナーだと思う。
01:57.430 --> 02:02.330
新しい環境にアップデートするために、 それを手元に置いておくのは良いことだ。 ymlファイル。
02:02.750 --> 02:05.540
さて、 それでは始めよう。
02:05.540 --> 02:07.160
モーダルについて話そう。
02:07.160 --> 02:12.140
だから今日の授業では、 まず輸入品は1つしかない。
02:12.140 --> 02:13.970
そして、 モーダルをインポートすることである。
02:14.000 --> 02:15.080
これでよし。
02:15.170 --> 02:25.190
トークンをセットアップしていない場合は、 モーダルセットアップと呼ばれるコマンドラインを実行する必要があります。
02:25.190 --> 02:31.010
その実行方法は、 この行のコメントを解除して、 そのステートメントを実行するだけだ。
02:31.040 --> 02:34.910
今、 私はそれをするつもりはない。 なぜなら、 私の環境はすでにセットアップされているからだ。
02:34.910 --> 02:42.710
しかし、 そうすると、 ブラウザ・ウィンドウがポップアップし、 モーダルを承認しなければならなくなる。
02:42.710 --> 02:46.190
そして、 モーダルがあなたの代わりに環境変数を設定する。
02:46.190 --> 02:47.900
それは本当に素晴らしいことだと思う。
02:47.990 --> 02:55.160
トークン、 特にOpenAIで人々が抱えていた課題はすべて、 これはまったく異なる経験だ。
02:55.160 --> 02:56.570
実に合理的だ。
02:56.570 --> 02:57.670
モーダルにはとてもいい。
02:57.670 --> 03:01.990
彼らはトークンをセットする方法を本当に理解しているようだ。
03:01.990 --> 03:07.000
何らかの理由でそれがうまくいかない場合は、 モーダルプラットフォームに行けば、 OpenAIのようなものと同じように、
03:07.000 --> 03:11.590
トークンを見つけることができます。
03:11.590 --> 03:13.810
そして、 手動で設定することができる。
03:13.930 --> 03:16.690
うーん、 でもうまくいけばいいんだけど
03:16.690 --> 03:17.860
確かに私にはそうだった。
03:17.860 --> 03:22.150
誰の目から見ても、 それが一般的な人々のための方法だ。
03:22.690 --> 03:23.650
分かった。
03:23.650 --> 03:31.750
次の行では、 helloというパッケージからいくつかのものをインポートします。
03:31.750 --> 03:35.140
これから、 その様子をお見せしましょう。
03:35.560 --> 03:37.990
つまり、 これはPythonの一部なんだ。
03:37.990 --> 03:39.880
ただのPythonのコードだよ。
03:40.090 --> 03:41.590
そして、 それが何をするものなのかを教えよう。
03:41.590 --> 03:43.150
そこで、 モーダルをインポートする。
03:43.150 --> 03:46.150
そして、 モーダルからいくつかのものをインポートする。
03:46.180 --> 03:51.130
アプリケーションのボリュームとイメージのためのアプリ。
03:51.340 --> 03:55.060
それに、 今見てみると、 結局ボリュームは使っていないんだ。
03:55.060 --> 03:56.840
だから、 その必要はないと思う。
03:56.870 --> 03:58.700
シンプルな方がいい。
03:59.240 --> 04:02.300
それで、 こうするんだ。
04:02.330 --> 04:03.650
まずはセットアップから始める。
04:03.650 --> 04:07.070
どのようなインフラが必要かをモーダルに伝える。
04:07.070 --> 04:11.030
これはモーダルの例で、 ドキュメントで少し触れています。
04:11.030 --> 04:15.260
しかし、 これはコードとしてのインフラの一種である。
04:15.260 --> 04:19.430
どのような箱が欲しいかをコードで記述することができる。
04:19.460 --> 04:24.320
Google Colabでは、 いろいろなドロップダウンを選んで、
04:24.320 --> 04:34.430
どんなVMが欲しいか、 どんなランタイムが欲しいかを選ぶ必要があった。
04:34.430 --> 04:40.760
つまり、 Debianオペレーティング・システムのイメージが欲しいということだ。
04:40.760 --> 04:48.530
pipでrequestsパッケージをインストールしたい。 このパッケージは、 URLウェブ作業を行うための、
04:48.530 --> 04:52.010
とても一般的な標準パッケージだ。
04:52.370 --> 04:59.650
そして、 GPUを指定するのだが、 これもこの例では使わない。
04:59.650 --> 05:00.520
申し訳ない。
05:00.700 --> 05:01.780
これで少しシンプルになった。
05:01.780 --> 05:05.800
この例ではGPUを使うつもりはない。 非常にシンプルにしているからだ。
05:06.160 --> 05:10.660
helloというメソッドがある。
05:10.690 --> 05:11.740
とてもシンプルだ。
05:11.740 --> 05:12.640
それは機能だ。
05:12.640 --> 05:13.150
こんにちは。
05:13.180 --> 05:14.710
これは文字列を返す。
05:14.950 --> 05:25.120
それで何をするかというと、 リクエストをインポートして、 IP情報というウェブサイトにアクセスするんだ。 これは知っておくと便利だ。
05:25.120 --> 05:35.560
JSONオブジェクトを返すユーティリティのひとつで、 IPアドレスの場所を記述している。
05:35.800 --> 05:44.710
そのJSONから都市、 地域、 国を抜き出し、 都市、 地域、 国からこんにちはと言う。
05:44.860 --> 05:46.840
ええと、 IPアドレスに基づいているだけです。
05:46.870 --> 05:52.540
だから、 あなたがどこにいようと、 少なくともISPがどこからあなたにサービスを提供していようと、 こんにちはと言うだけだ。
05:52.550 --> 05:57.710
だから僕にとっては、 ニューヨークにかなり近い場所になるだろうけど、 ニューヨークではないかもしれない。
05:57.980 --> 06:01.520
それはとてもシンプルな機能だ。
06:01.550 --> 06:07.850
このデコレーターはグラデーション・デコレーターで、
06:07.850 --> 06:13.490
アプリでデコレートされています。
06:13.490 --> 06:15.560
ハロー・ドット・ファンクション
06:15.620 --> 06:18.020
そして、 この画像の中を通過する。
06:18.020 --> 06:25.190
そして、 そのイメージはDebianのイメージを指しており、 そのイメージにはリクエストがインストールされている。
06:25.190 --> 06:33.860
このような装飾を施すことで、 我々が望めばこのような箱でこれを走らせることができると言っているのだ。
06:33.950 --> 06:35.510
それだけだ。
06:35.510 --> 06:37.940
だから、 そのことは横に置いておいてほしい。
06:37.940 --> 06:41.480
これは既存のコードの一部だと想像できるだろう。
06:41.480 --> 06:47.420
あなたは何かをしなければならなかった。 そして今、 あなたはそれを、 Debianオペレーティングシステムを使い、
06:47.420 --> 06:53.710
リクエストをインストールした上で、 それを実行できるようにしたいという言葉で飾った。
06:53.920 --> 06:57.520
このハローワークにあるのは以上だ。 パイ。
06:57.550 --> 06:59.020
超シンプルだ。
06:59.080 --> 07:03.790
初日のドット、 ジュピター・ノートブックに戻ろう。
07:04.420 --> 07:08.620
だから、 これからそれをインポートする。
07:08.740 --> 07:18.340
そして今できることは、 ここでインポートしたhello関数を呼び出すことだ。
07:18.370 --> 07:22.930
そして、 ハロー・ドット・ローカルと言って呼ぶことができる。
07:22.930 --> 07:30.730
つまり、 先ほど定義した関数を、 ローカル・ボックス上で実行したいのだ。
07:30.730 --> 07:32.920
このJupyterノートブックで実行したい。
07:33.130 --> 07:34.270
何が出てくるか見てみよう。
07:34.600 --> 07:36.460
だから、 今走っている。
07:37.300 --> 07:40.900
アメリカ、 ニューヨークのシーポートからこんにちは。
07:40.930 --> 07:43.600
そこが私のISPなんだと思う。
07:44.050 --> 07:44.920
もう一度やってみよう。
07:44.950 --> 07:46.450
ああ、 それはかなり一貫しているようだ。
07:46.450 --> 07:48.340
これがローカルで動いているわけだ。
07:48.970 --> 07:53.370
それと、 これを見てくれ。
07:53.400 --> 07:55.440
まったく同じことだ。
07:55.470 --> 07:58.260
ローカルをリモートに変更したところだ。
07:58.260 --> 07:58.920
それだけだ。
07:58.950 --> 08:00.360
唯一、 変えたことがある。
08:00.990 --> 08:02.400
どうなるか見てみよう。
08:05.850 --> 08:07.740
もう少し時間をかけてからにしよう。
08:07.770 --> 08:11.070
バージニア州アッシュバーンからこんにちは。
08:11.100 --> 08:17.910
まったく違う状態で走っているから、 それを期待しているんだろうね。
08:17.910 --> 08:19.020
おわかりだろう。
08:19.350 --> 08:21.060
あー、 時には違うこともある。
08:21.060 --> 08:23.820
ちなみに、 あちこちで見かけるようになった。
08:23.820 --> 08:31.920
つまり、 ローカルではなくリモートを呼び出すだけで、 同じコード、 同じPythonコードを呼び出すことができる。
08:31.920 --> 08:36.570
そしてそれはサーバーにデプロイされ、 代わりにそのサーバーで動いている。
08:38.280 --> 08:39.780
それはとても不思議なことだと思う。
08:39.780 --> 08:44.580
とてもシンプルで、 いくつかのコードをデプロイするだけでいいのだから、 魔法のようだ。
08:44.760 --> 08:47.970
そして今、 私たちはllamaという少し複雑なパッケージを手に入れた。
08:49.000 --> 08:52.030
そしてここからGPUのようなものが登場する。
08:52.030 --> 08:57.880
ハローの例と対になっているのがわかるだろう。
08:58.240 --> 09:04.120
まず、 自分のアプリのラマに電話するんだ。
09:04.750 --> 09:10.030
ええと、 もう一度Debianのイメージを作りますが、 今回はtorch transformers、 bits and bytesをインストールして、
09:10.030 --> 09:13.360
皆さんが知っているすべてのパッケージを加速させます。
09:13.360 --> 09:22.390
まあ、 この時点で、 うーん、 僕はモード・シークレットからハグする顔のトークンも手に入れている。
09:22.390 --> 09:27.310
モーダルでどのように設定するか、 どのようにシークレットにアクセスするか、 どのようにハグする顔のトークンを設定するか、
09:27.310 --> 09:29.320
すぐにお見せしましょう。
09:29.350 --> 09:32.170
そうしたら、 こう読むことができる。
09:32.830 --> 09:39.430
そして、 私はT4 GPUが欲しいと指定しているのですが、 それはもちろんとても安いベーシックなものです。
09:39.520 --> 09:41.470
そして、 ここには不変のものがある。
09:41.950 --> 09:47.910
そして今、 私はこの、 この、 生成機能を手に入れた。
09:47.910 --> 09:51.990
そして、 文字列であるプロンプトを受け取り、 文字列を返す。
09:52.770 --> 09:54.480
これはタイプのヒントの例である。
09:54.480 --> 09:55.920
ご存じない方も多いだろう。
09:55.920 --> 10:00.360
今回もいろいろなところでやることになるだろう。
10:00.360 --> 10:04.920
そして、 それは......少し経てば明らかになると思う。
10:05.430 --> 10:13.110
この関数を装飾して、 画像を渡し、 秘密を伝え、 T4 GPUが欲しいと言うと、
10:13.110 --> 10:18.600
コードを使ってサーバーを設定する。
10:18.780 --> 10:23.910
そして今、 これはローカルで実行する何かを書いているかのような単なる関数である。
10:23.940 --> 10:32.820
というのも、 私のマシンには、 このようなラマ・モデルをローカルで動かせるほどの馬力はないからだ。
10:32.820 --> 10:37.170
リャマCPのようなものに詳しい人ならできる方法もあるだろうけど、 ここに書いてあるようなことは僕にはできないし、
10:37.170 --> 10:41.040
やったとしてもとてもとても時間がかかる。
10:41.280 --> 10:48.010
それで、 T4 GPUを搭載したボックスでそれをやりたいんだ。
10:48.400 --> 10:51.430
ええと、 それで、 このコードはすべて、 あなたにとって非常に見慣れたものに見えるはずです。
10:51.430 --> 10:53.620
これがあなたが知っているコンフィグだ。
10:53.620 --> 10:59.800
つまり、 4ビットの量子化をラマに指定することになる。
11:00.160 --> 11:05.320
ええと、 トークナイザーをロードします。
11:05.320 --> 11:08.440
さて、 モデルをロードしよう。
11:08.440 --> 11:17.110
そして、 入力としてプロンプトをトークンにエンコードする。
11:17.140 --> 11:20.560
その警告を受けないように、 このアテンションマスクを設定した。
11:20.650 --> 11:23.380
そして、 モデル・ドット・ジェネレーションを行う。
11:23.380 --> 11:25.000
インプットを渡す。
11:25.000 --> 11:31.810
新しいトークンは5つだけで、 返事は1つでいいとする。
11:31.810 --> 11:36.520
私たちはその1つのレスポンスを受け取り、 それを解読して返す。
11:36.550 --> 11:38.470
簡単なことだ。
11:38.530 --> 11:43.900
では、 それを実行してみよう。
11:44.130 --> 11:47.100
だから、 いろいろなことが起きている。
11:47.100 --> 11:52.200
それで、 まず最初に、 僕は実際に何を走ったんだ?
11:52.200 --> 12:02.070
リモート関数を呼び出したわけだが、 ラマモデルに渡したプロンプトの内容は謎だ。
12:02.070 --> 12:04.260
誰もが独り立ちしなければならない。
12:04.290 --> 12:13.110
今聞いたところでは、 ええと、 ええと、 願わくば、 ほとんどの人がそこから次に何が起こるかを知っていてほしい。
12:13.110 --> 12:15.360
そうでなければ、 私はとても年を取ったように感じるだろう。
12:15.570 --> 12:23.040
ええと、 でも、 ええと、 これはもちろん、 マドンナの『Like a Prayer』のオープニングからそのままなんだけど。
12:23.040 --> 12:26.760
そして、 次は私の名前を呼ぶと聞いている。
12:26.790 --> 12:29.310
それを言わないのは、 ほとんど耐え難いことだ。
12:29.460 --> 12:33.750
あー、 今日一日、 頭の中でこの歌が鳴りっぱなしだ。
12:33.870 --> 12:35.040
あ、 でも、 あの。
12:35.040 --> 12:35.310
そうだね。
12:35.340 --> 12:40.410
そして、 もし僕がそれをいつまでも君の頭の中に置いていたら申し訳ないんだけど、 でも、 とてもキャッチーな曲なんだ。
12:40.440 --> 12:45.220
とにかく、 今我々が見ているのは、 あの箱の上で何が起こっているかということだ。
12:45.370 --> 12:49.240
そして、 モーダルそのものに切り替えることもできる。
12:49.420 --> 12:55.330
ええと、 ええと、 この画面をリフレッシュさせてください。
12:56.890 --> 12:59.290
つまり、 デプロイされたアプリではないんだ。
13:04.270 --> 13:05.350
儚いアプリ。
13:05.350 --> 13:06.340
そういうことだ。
13:06.550 --> 13:08.620
ちょっと待ってください。
13:08.710 --> 13:09.730
それでこれだ。
13:09.730 --> 13:11.050
今走っている。
13:11.080 --> 13:17.650
エフェメラルなアプリとして動いている。
13:17.650 --> 13:22.570
クリックすると、 ステータスが実行中であることがわかる。
13:22.990 --> 13:26.380
それと、 他に何が手に入るかな?
13:26.590 --> 13:29.680
だから、 コンテナはライブなんだ。
13:31.990 --> 13:35.230
メモリやCPUコアを見ることができる。
13:39.220 --> 13:42.960
そして、 我々が指定した通り、 T4 GPUであることがわかる。
13:43.620 --> 13:52.740
そして、 "ハロー "を見ることもできる。 PYは今走ったこのボックスにもある。
13:52.740 --> 13:59.730
そしてラマ。 さっき書いたPythonスクリプトが置いてある。
14:00.390 --> 14:03.330
ええと、 それではどうぞ。
14:03.360 --> 14:07.770
ここにいる間に指摘しておきたいのは、 ここの一番上にあるのは秘密だということだ。
14:07.770 --> 14:12.540
そしてシークレットはもちろん、 シークレットをセットする場所である。
14:12.540 --> 14:14.160
だから、 そうする必要がある。
14:14.310 --> 14:18.210
ハグしている顔の形見の秘密がバレないように、 今はそれをクリックするつもりはない。
14:18.270 --> 14:24.570
でもそこで、 このエフェメラル・サービスにデプロイされたコードで、
14:24.570 --> 14:30.240
ハグする顔のトークンを使えるようにするんだ。
14:30.840 --> 14:32.310
だからまだ動いている。
14:32.310 --> 14:35.550
この時点で、 私はこのビデオに固執すると思う。
14:35.550 --> 14:39.420
で、 戻ってきたら、 ああ、 もう成功したって書いてある。
14:39.630 --> 14:43.690
ええと、 ちょうど終了したというメッセージも受け取ったところだ。
14:43.840 --> 14:45.280
ええと、 それで...。
14:45.280 --> 14:45.880
見てみよう。
14:45.910 --> 14:46.180
そうだ。
14:46.180 --> 14:47.320
ここに戻る。
14:48.400 --> 14:49.870
何が出てくるか見てみよう。
14:49.900 --> 14:52.330
私の名前を呼ぶ声が聞こえる。
14:52.390 --> 15:01.420
ええと、 だから、 ラマ、 4ビット量子化バージョンのラマも、 マドンナの曲を完成させないわけにはいかなかったんだ。
15:01.690 --> 15:07.360
ええと、 それで、 このコードを実行することに成功しました。
15:07.600 --> 15:22.900
このエフェメラルな、 あー、 モーダルなサービスを使って、 あー、 量子化されたラマ、 あー、 モデル、 あー、 ラマ3を走らせる。
15:22.900 --> 15:22.900
プロンプトを完成させるモデル1名。
15:23.200 --> 15:24.070
分かった。
15:24.070 --> 15:30.100
また戻ってきたら、 モデルをデプロイして、 前回構築した独自モデルの周りにAPIをどのように配置するか、
15:30.100 --> 15:37.870
実際にやって見よう。
15:38.110 --> 15:39.550
すぐに会おう。