さあ、あなただけの人工知能を作ってみましょう。
この内で、実際のファイルとプロセスを使う環境を確認します。に三つの確認コマンドを入力しましょう。pip・アカウント・・は不要です。
開発環境
の にはが入っています。だけで実習でき、・・は不要です。
は大きなで計算とを担うで、は対応の加速機能です。このでは使いません。の通常や常駐プロセスには制約があるため、全実習をAlpineで行います。
Python の標準ライブラリだけで — 使うモジュールと役割
は pip で何もインストールしません。Python を入れると一緒についてくる標準ライブラリだけを使います。
- : 設定・・チェックポイントを文字のファイルとして保存し、読み込みます。
- math: exp・log・sqrt のような数学です。
- random: の初期値、区間の選択、の抽選に使う乱数です。同じ seed なら同じ結果になります。
- collections.Counter: で隣り合うペアの回数を数えます。
- pathlib: ファイルを読み書きします。
- argparse: --steps のようなのオプションを受け取ります。
- hashlib: 学習資料の指紋()を作り、資料が変わったかどうかを見つけます。
- os: チェックポイントを安全に差し替えます()。
- ・urllib: のと のです。
インストールがないので、の衝突やインストールの失敗がありません。その代わり、行列計算ライブラリ(・PyTorch)がしていた仕事を自分で書く必要があります。それこそがこの過程の目的です。
ブラウザーの中の Linux — 何がどこで動くのか
右のはサーバーに接続したものではありません。このの中で本物の Linux が動いています。
- v86: の をまねるです。 で作られ、ブラウザーで動きます。
- Alpine Linux 32bit: その仮想 CPU の上で動く小さな Linux です。は 512MB です。
- ・・・・: Linux の中にあらかじめ入っているです。
は、学生のコンピューターの CPU がエミュレーターを通して実行します。サーバーにを送らないので、何を実行しても安全です。その代わりエミュレーションなので、同じ Python のコードでも自分のコンピューターで直接動かすよりずっと遅くなります。そのため XSLM の基本の大きさと学習回数を小さくしました。
~/xslm のファイルはこのブラウザーに保存され、再読み込みしても残ります。実行中だったプログラム(Runner など)は再読み込みで止まるので、もう一度起動します。
もっと大きなモデルはどんな道具で作るか
XSLM は Python の標準ライブラリだけを使います。もっと大きなモデルを作るときは、ふつう次の道具を使います。
- PyTorch: 数字の配列(テンソル)の計算と自動微分を GPU で速く行います。XSLM の engine.py がする仕事です。
- tokenizers: 速い BPE トークナイザーのライブラリです。 で作られていて、純粋な Python より100倍ほど速いです。XSLM の tokenizer.py がする仕事です。
- numpy・tqdm: 数字の配列と進捗バーです。
- : Python のプロジェクトとパッケージを管理します。uv add torch のようにインストールします。
- 装置(device): 計算する場所です。Apple の GPU は mps、 の GPU は 、なければ cpu です。
道具が違っても、原理は XSLM と同じです。道具は同じ計算を速くしてくれるだけです。
なぜ遅いのか — 数字を1つずつ計算するコスト
XSLM の計算は、すべて Value 1つ1つの足し算と掛け算です。トークン12個の区間を1回学習するときを数えてみると、こうなります。
- 位置ごとに query・key・value・project・expand・contract・head でが7回あり、行列の掛け算1つは掛け算と足し算が数十〜数百回です。
- 計算1つごとに Value オブジェクトが1つでき、に記録されます。基本設定では1回の学習で約3万2千個できます。
- backward はこのオブジェクトをすべて逆向きにもう一度通ります。
PyTorch は同じ計算を行列単位でまとめ、・GPU で一度に処理するので、数百〜数千倍速くなります。原理を見るために、わざと遅い道を選んだのです。学習に時間がかかるときは で止めても、最後に終えた段階までは保存されています。
このブラウザのリナックスで基本の学習 20 回(python3 train.py --steps 20)を測ると、速いデスクトップ(Apple M5 Max)で約 23 秒、CPU を 4 倍遅くすると約 2 分 13 秒、6 倍遅くすると約 4 分 5 秒かかりました。生成(generate.py)はそれぞれ約 3 秒・17 秒・33 秒でした。遅いコンピューターなら --steps 5 のように分けて実行してください。チェックポイントから続けて学習するので、結果は一度に行ったときと同じです。
この過程に必要な Python・ターミナルの基礎
ソースを入力しながら詰まらないよう、本当に必要なものだけをまとめます。
- micro ファイル名.py: Python ファイルを開いて直します。+S で保存、Ctrl+Q で閉じます。Enter を押すとが次の行に引き継がれるので、ソースより深くなったら Backspace で減らします。
- nano ファイル名: settings.json や raw.txt などほかのファイルを開いて直します。Ctrl+O の次に Enter で保存、Ctrl+X で閉じます。
- python3 ファイル名.py: プログラムを実行します。python3 だけを打つと1行ずつ試せる対話型 Python()が開き、exit() で抜けます。
- インデント: Python は空白でブロックを分けます。この過程では1段に空白4個を使います。Tab と空白を混ぜると になります。
- : from model import は、同じフォルダーの model.py から GPT を持ってきます。だからすべてのコマンドを ~/xslm で実行します。
- if __name__ == '__main__': ファイルを直接実行したときだけ、その下のコードが動きます。他のファイルが import したときは動きません。
- , メッセージ: 条件が偽なら、そのメッセージで止まります。XSLM は間違った資料・設定を早めに見つけるために assert を使います。
エラーが出たら、 の一番下の行から読みます。最後の行がエラーの種類とメッセージで、その上の File … line の数字が問題の起きた場所です。
自分のコンピューターでもっと大きく作りたいなら
XSLM を終えて、もっと大きなモデルを学習したくなったら、自分のコンピューターに PyTorch の環境を作ります(任意)。
- Python 3.10 以上をインストールします。
- uv をインストールします: curl -LsSf https://astral.sh/uv/install.sh | (macOS は install uv でもできます)。
- uv init my-gpt でプロジェクトを作り、 my-gpt したあと uv add torch tokenizers tqdm numpy でインストールします。
- Apple Silicon の Mac なら、uv run python -c "import torch; (torch.backends.mps.is_available())" が True かどうかを見ます。NVIDIA の GPU は torch.cuda.is_available() で確認します。
Apple Silicon は MPS、Linux・ の NVIDIA GPU は CUDA、それ以外は CPU で学習します。CPU でも学習できますが遅いです。XSLM で学んだ名前(・・・損失・)は、PyTorch のコードにもそのまま出てきます。
入力して実験
3命令でPythonの版、x86構造、readyを確認します。以降もこの端末を使います。
python3 --version
uname -m
python3 -c "import json, math, random, http.server; print('ready')"
ターミナルで実習する
理解を確認
torchもMPS設定も不要な理由を説明してください。
困ったとき
pip install torchは不要です。起動失敗は接続を確認して再試行します。
よくある質問
pip install torch をすれば速くなりますか?
このターミナルではしないでください。PyTorch には 32bit Linux 用のパッケージがなく、あったとしても 512MB メモリーのエミュレーターでは動かすのが難しいです。XSLM のソースは torch を読み込まないので、必要もありません。PyTorch は自分のコンピューターに別にインストールして使ってください。
Pyodide でブラウザーで Python を動かしてはだめですか?
Pyodide はブラウザーで Python の計算ができるので、トークナイザー・学習まではできます。しかし一般的なソケットサーバーとプロセスに制約があるため、Runner( サーバー)を立ち上げて別のプログラム(XChat)が接続する実習ができません。そのため、すべての実習を本物の Linux(Alpine)で行います。
再読み込みすると、何が残って何が消えますか?
~/xslm の中の .py・.json・.txt・.md ファイル(最大100個・)は、コマンドが終わったときと5秒ごとにこのブラウザーに保存され、もう一度開くと戻ってきます。実行中のプログラム、それ以外の拡張子、他のフォルダーのファイルは消えます。保存はこのブラウザーの中だけなので、別のブラウザーやコンピューターでは空の状態から始まります。