0Pricing
Mojo Academy · レッスン

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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Mojoでテンソルをモデル化する
  2. Matmulを段階的に構築する
  3. 内積の最適化
  4. 数値的な正しさの検証
← Mojo Academyに戻る