Agentic OS 技術スタックを下から読む 補講(4):一つのモデルを、多くの機械へ広げる ―― 計算は割れる、通信は割れない
前回は、言葉の刻みで、いちばん下を見ました。
Agentic OS 技術スタックを下から読む 補講(4):一つのモデルを、多くの機械へ広げる ―― 計算は割れる、通信は割れない
補講、四つ目 ―― 一つのモデルを、多くの機械へ
前回は、言葉の刻みで、いちばん下を見ました。
一つの文を、そのまま機械に渡すのではありません。まず細かい切れ目に分けます。その切れ目に番号を付けます。番号の列として扱えるようにします。そこまで下りて、言葉が計算に入る入口を見ました。
補講は、まだ続く。
今回は、同じく下です。ただし、見る面が違います。今度は、鍛える側です。
一つのモデルが、大きくなりすぎると、一台の機械には収まりません。重みも多すぎます。途中で使う作業用の置き場も足りません。計算の量も、一台では何週間も何か月もかかります。
そこで、多くの機械に広げます。
ただし、機械を増やせば、そのまま速くなるわけではありません。計算は割れます。けれど、割ったものは、あとで揃えなければなりません。この揃えが重くなります。
ここが今回の主題です。
まず、計算を割る ―― 三つの割り方
大きなモデルを鍛えるとき、計算の割り方は、大きく三つあります。
一つ目は、同じモデルの写しを、何台にも置くやり方です。
それぞれの機械には、同じ重みがあります。ただし、食わせるデータの束は違います。ある機械は一つ目の束を見ます。別の機械は二つ目の束を見ます。さらに別の機械は三つ目の束を見ます。
同じ問題集を、何人にも配るのに近いです。ただし、各人が解くページは違います。みんなが同時に解けば、短い時間で多くの例を見られます。
二つ目は、一つの層の中の計算を、横に切るやり方です。
層とは、入力を受け取り、重みを使って、次の形に変える一段のまとまりです。その中では、大きな表のような数の塊を使って、多くの掛け算と足し算をします。この一段が大きすぎると、一台では抱えきれません。
そこで、表を列や行の方向に分けます。ある機械は左側を持ちます。別の機械は右側を持ちます。それぞれが自分の持ち分を計算します。あとで断片を突き合わせます。
三つ目は、層そのものを機械ごとに分けるやり方です。
前の層を持つ機械が計算します。終わったら、結果を次の層を持つ機械へ渡します。次の機械がまた計算します。さらに次へ渡します。
これは、流れ作業です。一つの品物が、前の作業台から次の作業台へ渡っていく形です。
第3回では、鍛え終わったものを使う側で、仕事をどう割るかを見ました。今回は、その手前です。そもそも、その大きなものをどう鍛えるかです。
どの割り方でも、計算そのものはかなりきれいに割れます。手は増やせます。問題は、そのあとです。
だが、割ると、揃えないといけない
一つ目の割り方を、もう少し細かく見ます。
同じモデルの写しが、別々のデータの束を見ます。すると、それぞれの写しは、今の重みをどう直せばよいかを計算します。
この「どう直せばよいか」は、向きと大きさを持っています。間違いが減るほうへ、少しだけ動かすための指示です。ここでは、難しい言い方は要りません。こう直せ、という方向です。
ただし、各機械が見たデータは違います。だから、出てくる方向も少しずつ違います。
ある機械は、こちらへ直せと言います。別の機械は、少し違う方向へ直せと言います。さらに別の機械は、もっと別の癖を持った方向を出します。
ここで、各機械が勝手に重みを直してしまうと、同じモデルの写しではなくなります。最初は同じだったのに、一歩進んだだけで別物になります。次の一歩では、もう同じ訓練をしているとは言えません。
だから、全員の出した方向を集めます。足し合わせます。平均します。そして、その平均した一つの方向を、全台に配り直します。
全台が同じ方向で、同じだけ重みを直します。そうして初めて、写しはまた同じ状態に戻ります。
この揃えは、一歩ごとに必要です。
計算だけなら、各台が勝手に進めます。けれど、同じ一つのモデルを鍛える以上、勝手には進めません。手分けして計算したあと、必ず一度集まって、同じ状態に揃えます。
通信が、律速になる
ここで、重いものが出てきます。通信です。
通信とは、機械どうしが数の塊を送り合うことです。ここで送るものは、小さな合図ではありません。重みと同じ形をした、こう直せという方向です。モデルが大きければ、この方向も大きくなります。
一歩ごとに、各機械はこの大きな塊を外へ出します。ほかの機械からも受け取ります。足し合わせます。平均したものを全台で共有します。
計算は、GPUの中で速く進みます。数を掛け、足し、次々に処理します。ところが、機械の外へ出ると、話が変わります。線を通して送れる量には限りがあります。途中の受け渡しにも時間がかかります。
第39回で見た土台の話が、ここに戻ってきます。計算そのものより、運ぶことが先に詰まる、という話です。今回は、その訓練版です。
各機械は、自分の計算を終えても、すぐ次へ進めません。ほかの機械の方向が届くのを待ちます。平均ができるのを待ちます。新しい重みが揃うのを待ちます。
その間、計算する力は余っています。手は空いています。けれど、進めません。
台数を増やすと、計算の手は増えます。見るデータの束も増やせます。だから、速くなるはずです。
しかし、台数を増やすほど、揃える相手も増えます。送る経路も増えます。届くのが遅い機械を待つ場面も増えます。
ある所から先は、機械を足しても伸びが鈍ります。計算の増え方より、揃えの重さが目立つからです。分散訓練の難しさは、ここにあります。
横に切ると、もっと話す
二つ目の、一つの層を横に切る割り方は、さらに通信が濃くなります。
同じ層の中を分けるので、計算の途中で相手の持ち分が必要になります。自分の断片だけでは、次の形を完成できません。
たとえば、大きな表を左右に分けたとします。左側を持つ機械は、左側の分だけを計算できます。右側を持つ機械は、右側の分だけを計算できます。けれど、層の出力として必要なのは、左右を合わせた結果です。
途中で、どちらかの結果を相手に渡します。足し合わせます。並べ直します。次の層へ渡せる形に戻します。
この受け渡しは、一歩の終わりだけではありません。層を進む途中で何度も起きます。前へ進む計算でも起きます。戻って直し方を求める計算でも起きます。
だから、この割り方は、機械どうしがごく近い場所にあるときに向きます。とても速い線でつながっている範囲なら、断片を細かく渡しても耐えられます。
逆に、遠い機械へ横に切って配ると、苦しくなります。計算より、話す時間ばかりが増えます。断片を作っては送り、受け取っては待つことになります。
横に切る割り方は、強いです。大きな層を抱えられるようになります。けれど、近い機械で固めないと、長所が消えます。
近いか、遠いか。
この物理的な差が、そのまま設計の差になります。
流れ作業には、隙間ができる
三つ目の、層を機械ごとに分ける流れ作業には、別の無駄があります。隙間です。
最初の機械が、一段目を計算します。終わると、結果を二台目へ渡します。二台目が二段目を計算します。さらに三台目へ渡します。
この形では、最初のひと束が後ろへ届くまで、後ろの機械は動けません。二台目は、一台目が終わるまで待ちます。三台目は、二台目が終わるまで待ちます。最後の機械は、かなり後になってから動きます。
立ち上がりでは、後ろが空きます。
終わりにも、同じことが起きます。最後のひと束が流れ終わるころ、前の機械はもう仕事を終えています。後ろだけが残ります。今度は前が空きます。
この空き時間が、隙間です。
隙間を薄めるには、データの束を細かく刻みます。大きな束を一つ流すのではなく、小さな束を次々に流します。
一つ目の小さな束が二台目へ渡ったら、一台目はすぐ二つ目の小さな束に入ります。二台目が一つ目を処理している間に、一台目は二つ目を処理します。三台目が一つ目を処理するころには、二台目は二つ目へ、一台目は三つ目へ進みます。
こうすると、作業台が埋まりやすくなります。隙間は薄くなります。
ただし、ゼロにはなりません。
最初に流し始める時間は残ります。最後に流し終える時間も残ります。束を細かくしすぎると、今度は渡す回数が増えます。細かく刻むほど、管理と受け渡しの費用も増えます。
流れ作業は、計算を層ごとに分けられる強い方法です。けれど、常に隙間との取引になります。
一台こけると、全部止まる
多くの機械で鍛えるとき、もう一つ避けられない問題があります。もろさです。
何千台もの機械が、同じ一歩を進んでいます。それぞれが計算し、方向を出し、揃えを待ちます。全台が同じ状態に戻ってから、次の一歩へ進みます。
この形では、どこか一台が止まると、全体が止まります。
残りの機械が正しく動いていても、一台が欠ければ、揃えが完成しません。その一台の方向が来ません。平均ができません。次の重みを全台で一致させられません。
第14回で見た、一体がこけると全体が崩れる話が、ここでは何千台の規模で起きます。
しかも、何千台で何週間も回すなら、一台の故障は珍しい事件ではありません。日常です。どこかの部品が止まります。線が不安定になります。計算の途中で一台が遅れます。記録を書けない台も出ます。
だから、途中の状態を外に書き出します。
重みだけでは足りません。今どこまで進んだかも要ります。重みを直すために使っている補助の値も要ります。データのどの位置まで見たかも要ります。乱れを入れる仕組みを使っているなら、その続き方も要ります。
これらを、訓練の途中でまとめて保存します。
こけたら、最初からやり直しません。最後に保存した場所まで戻ります。そこから再開します。
第46回で見た、外に状態を出して、足場まで戻る話です。あれが、鍛える現場にもあります。速くするためだけではありません。最後まで走り切るために、戻れる場所を作るのです。
割れる計算と、割れない通信
まとめます。
一つのモデルを多くの機械へ広げるとき、計算は割れます。同じモデルの写しを配れば、違うデータを同時に見られます。一つの層を横に切れば、大きな層を複数の機械で持てます。層ごとに分ければ、流れ作業にできます。
けれど、割ったものは揃えなければなりません。
同じ写しを持つなら、こう直せという方向を集め、平均し、全台に配り直します。横に切るなら、計算の途中で断片を何度も突き合わせます。流れ作業にするなら、前後の機械の間に隙間が生まれます。
計算は増やせます。けれど、通信は同じようには割れません。むしろ、台数が増えるほど重くなります。誰かを待つ時間も増えます。一台が止まれば、全体が止まります。
だから、分散訓練の設計は、計算をどう割るかだけでは決まりません。
通信をどう減らすか。近い機械の中で、どこまで横に切るか。流れ作業の隙間をどう薄めるか。こけても、どこまで戻ればよい形にしておくか。
勝負は、そこにあります。
手を増やすことより、増やした手をどう揃えるかのほうが難しいのです。
前に見た土台の非対称が、ここにもあります。計算は余り、運ぶことが詰まります。その形は、賢いモデルを生むいちばん手前の現場でも変わりません。
賢さが生まれる場所は、派手な計算の祭りではありません。地味な運びと、揃えとの戦いです。
補講は、まだ続く。
← 一覧へ