Matmulを段階的に構築する
単純なループから実用的なカーネルまでを学びます
「Matmulを段階的に構築する」はCoddyKit上の無料Mojo Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはMojo Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Mojo Academyコースには全4レッスンが含まれています。
Matmulで計算されるもの
行列積、つまりmatmulは、M 行 K 列の行列と K 行 N 列の行列を組み合わせ、M 行 N 列の結果を生成します。これはAIの計算の中心です。
内積のルール
出力の各セルは内積です。Aの1行を横方向に、Bの1列を縦方向にたどりながら、対応する値を掛け合わせて合計します。
3重ループ
素朴な実装では、i、j、kについて3つのループを使います。外側の2つで出力セルを選び、内側のループで積を合計します。
for i in range(M):
for j in range(N):
for k in range(K):
C[i, j] += A[i, k] * B[k, j]各セルをゼロから始める
累積を始める前に、各結果セルをゼロに設定します。そうしないと、古い値や不定な値が合計に混入します。
C[i, j] = 0.0合計を累積する
内側の k ループではアキュムレーターに値を順次加算します。毎回 C にアクセスするより、ローカル変数に合計するほうが高速なことがよくあります。
var acc: Float32 = 0.0
for k in range(K):
acc += A[i, k] * B[k, j]
C[i, j] = acc速度のためにfnを使う
fnと型付き引数を使ってカーネルを記述します。厳密な型により、Mojoは動的なオーバーヘッドなしで無駄のないマシンコードをコンパイルできます。
fn matmul(A: Matrix, B: Matrix, C: Matrix):
pass素朴な実装が遅い理由
基本的な3重ループは正しい計算を行いますが、Bを列方向に読み取るため、メモリ上を飛び飛びに移動します。低い局所性によってキャッシュと時間が無駄になります。
ループ順序が重要
i、k、jの順に並べ替えると、内側のループでメモリを一直線にたどれます。よりよいアクセスパターンにより、matmulを大幅に高速化できます。
for i in range(M):
for k in range(K):
for j in range(N):
C[i, j] += A[i, k] * B[k, j]内側のループを最適化する
ほとんどすべての時間は最内周ループで費やされます。このホットな内側のループこそ、ベクトル化とチューニングの効果が現れる場所です。
正しさを最優先する
まず単純な実装を正しく動かし、その出力を保存します。それが、以降の高速なカーネルすべてと比較するリファレンスになります。
本格的なカーネルへの道筋
ここからSIMD、タイリング、並列化を追加していきます。各段階で結果は同じまま、スループットをピーク時のハードウェア速度へ近づけます。
クイックチェック
教科書的な3重ループのmatmulは、実際の環境ではなぜ遅くなりがちですか?
まとめ
Matmulでは3つのループで出力セルごとに内積を合計します。セルをゼロから始め、ローカルに累積し、キャッシュを意識してループ順序を選びます。🔢
よくある質問
「Matmulを段階的に構築する」レッスンは無料ですか?
はい。「Matmulを段階的に構築する」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Mojo Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Mojo Academyコースには全4レッスンが含まれています。
「Matmulを段階的に構築する」で何を学びますか?
単純なループから実用的なカーネルまでを学びます ブラウザで直接実行するハンズオンコードでMojo Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Mojo Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのMojo Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「Matmulを段階的に構築する」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このMojo Academyレッスンでコードを書いて実行できますか?
はい。すべてのMojo Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Mojoでテンソルをモデル化する
- Matmulを段階的に構築する
- 内積の最適化
- 数値的な正しさの検証