Slide 1

Slide 1 text

MN-Core SDK × LLM推論 樋口 兼一 AIコンピューティング事業本部 ソフトウェア開発部 エンジニア 坂本 亮 AIコンピューティング事業本部 ソフトウェア開発部 部長 株式会社Preferred Networks

Slide 2

Slide 2 text

2 2020/04- 株式会社 Preferred Networks ● Green500 ランキング向けのベンチマークチューニング (安達さんと!) ○ スケジュールを手書きした紙、持ってきています ● MN-Core SDK のうち、MLSDK (後述) の開発 ● (一応) エンジニアリングマネージャー 2年生 自己紹介 - 樋口 兼一 (Tomokazu Higuchi) 最近、人から褒められるのが好きになった

Slide 3

Slide 3 text

3 ● MN-Core シリーズ上で開発を行うためのソフトウェアパッケージ ○ MLSDK: Machine Learning (ML) 向けの開発環境 ○ HPCSDK: High Performance Computing (HPC) 向けの開発環境 ● PFN 社員が開発・運用していたコンパイラ及びランタイムを、外部提供 用にパッケージングしたもの ● PFCP (後述) などの環境で利用可能 MN-Core Software Development Kit (SDK) とは

Slide 4

Slide 4 text

4 MN-Core SDK: MLSDK vs. HPCSDK MLSDK HPCSDK 対象タスク 深層学習 HPC 等 入力 interface Python, PyTorch, ONNX(計算グラフ) C/ C++等 タスク例 画像識別モデルの学習、画像生成、 LLM 流体計算、画像処理(特徴量抽出)等 特徴 深層学習タスクを比較的高レイヤー からコ ンパイルして実行する 利用に MN-Core の専門知識は不要 比較的低レイヤー で記述された計算を、 コンパイルして実行する ある程度の MN-Core の専門知識が必要

Slide 5

Slide 5 text

5 ● PFN が構築、運用する AI・ML ワークロード向けのクラウドサービス ○ https://pfcomputing.com/ ○ ユーザガイド: https://docs.pfcomputing.com/ ● PFN のエンジニア・リサーチャが使用する環境と同じものを提供 ○ これまで社内向けに計算基盤を開発運用してきた経験を元に開発 ● 強力な計算ボードと高速なネットワーク ○ 独自開発したアクセラレータ MN-Core™ シリーズを提供 ○ 深層学習に最適化された高速なネットワークで相互に接続 誰もが MN-Core™ シリーズを利用できる AI クラウドサービス Preferred Computing Platform (PFCP)

Slide 6

Slide 6 text

6 ブラウザからアクセスできる対話型の作業環境を作成する機能を提供 JupyterLab などのインターフェイスを通して計算リソースを利用できます 対話型実験環境: ワークスペース機能 ブラウザから迅速にアクセラレータを利用 管理コンソールで環境を管理 インタラクティブな作業環境を作成する - Preferred Computing Platform(PFCP)ユーザガイド

Slide 7

Slide 7 text

7 MN-Core SDK のソフトウェアスタック MN-Core Runtime PFVM Runtime codegen (emit) PFVM FX2ONNX MNCL Host Runtime MNCL Device Translator MNACC codegen (sched.)

Slide 8

Slide 8 text

8 MLSDK: 機械学習向け開発環境 MN-Core Runtime PFVM Runtime codegen (emit) PFVM FX2ONNX MNCL Host Runtime MNCL Device Translator MNACC codegen (sched.)

Slide 9

Slide 9 text

9 ● PyTorch プログラムを MN-Core シリーズ上で動かすことが目的 ● 各種ソフトウェアスタックをまとめ、Docker イメージとして提供 構成要素 ● Python インターフェース (MLSDK API) ● グラフコンパイラ / ランタイム ● codegen dashboard ● ドキュメント / 使用例 MLSDK について

Slide 10

Slide 10 text

10 ● PyTorch のエコシステム (Module, dataloader など) を活かしつつ、 計算のコア部分を MN-Core シリーズで高速化 MLSDK API の利用手順 ● 計算のコア部分を定義 (関数化) ● 関数を MLSDK API に渡してコンパイル ● コンパイル済み関数は Python から呼び出し可能で、内部的に MN-Core 上で実行される Python インターフェース (MLSDK API)

Slide 11

Slide 11 text

11 ● 計算グラフとして出力するため、入出力ノード名の指定が必要 ● 定義する関数は Callable[[Dict[str, Tensor]], Dict[str, Tensor]] の型 元の add 関数 コンパイル用に書き換えた add 関数 MLSDK API: 計算のコア部分を定義 (関数化)

Slide 12

Slide 12 text

12 ● コンパイルに必須な引数は以下の3つ ○ コンパイル対象の関数 ○ 入力値のサンプル ○ コンパイル結果の出力先ディレクトリのパス ● 入力値のサンプルは、関数から静的な計算グラフを出力するために必要 ● add() 関数に対する入力値のサンプルの例 MLSDK API: 関数のコンパイル

Slide 13

Slide 13 text

13 ● context.compile() に指定可能なオプション (一部) ○ options: コンパイラへの各種指定など ■ float_dtype: 計算精度の指定 ○ cache_options: コンパイル結果のキャッシュ先の指定など ● add() 関数をコンパイルする例 MLSDK API: 関数のコンパイル

Slide 14

Slide 14 text

14 ● コンパイル結果 (compiled_add()) はそのまま呼び出し可能 ○ 入力する Tensor の shape, dtype は、コンパイル時に指定したサン プルと合わせる ● デバイス上の出力結果は、同期後にホストからアクセス可能になる ● 関数呼び出しの例 MLSDK API: コンパイルした関数の呼び出し

Slide 15

Slide 15 text

15 GPFNApp グラフコンパイラ: MLSDK API のバックエンド FX2ONNX PFVM codegen (schedule) codegen (emit) Info. Assembly def MLPfn(): …

Slide 16

Slide 16 text

16 ● プログラムカウンタや仮想アドレスの仕組みがないため、GPFNApp 中 の情報によってアセンブリを補完する ● GPFNApp に含まれる重要な要素 ○ アセンブリコード ○ モデルのパラメータなどのデータ (登録されていた場合) ○ 入出力 Tensor の shape, dtype 等のデータ ● GPFNApp の担当する他の機能 ○ アセンブリの DRAM へのマッピングを動的に行う仕組み ○ 断片化したアセンブリを関数のように呼び出す仕組み ランタイム: GPFNApp を MN-Core 上で動作させる

Slide 17

Slide 17 text

17 ● コンパイル内容や、パフォーマンスのプロファイルを可視化するツール ● コンパイル時の出力先ディレクトリ (codegen_dir) を受け取り、指定し たポートに対して Web サーバーを起動する ● 起動時のコマンド例 ./codegen-dashboard-external serve --port 8327 codegen dashboard

Slide 18

Slide 18 text

18 ● codegen_dir の内容を、以下のようにブラウザから参照できる codegen dashboard 例1: コンパイル対象の計算グラフ 例2: 各計算ノードと処理時間のプロファイル

Slide 19

Slide 19 text

19 ● MLSDK を試す、もしくは活用するための資料 ドキュメント / 使用例 MLSDKドキュメント (日/英) MLSDK の使用例

Slide 20

Slide 20 text

20 ● 実際に MLSDK を利用する場合、以下の手順を想定 ○ ワークスペースの構築と、PyTorch プログラムの動作確認 ○ デバイス上で処理したい計算を関数化 ○ 関数が正しく計算グラフとして出力出来るかをチェック ■ codegen dashboard による計算グラフの確認 ■ PFVM による計算グラフの実行 ○ 計算グラフのコンパイル結果のチェック MLSDK を利用する

Slide 21

Slide 21 text

21 ● 内部的には以下の順番で PyTorch から機械語まで変換している ○ PyTorch プログラム ○ FX2ONNX で計算グラフを ONNX フォーマットで出力 ○ PFVM で計算グラフを最適化 ■ ここで計算グラフを直接実行することも可能 (後述) ○ codegen で計算グラフを MN-Core シリーズ上で動作させるのに必 要な処理を追加 (schedule) ■ その後、各オペレータから機械語を出力し (emit)、それらをリ ンクすることで最終的なバイナリ (GPFNApp) を得る グラフコンパイラ: MLSDK API のバックエンド

Slide 22

Slide 22 text

22 ● PFCP のユーザーガイドを参考に、ワークスペースを構築 ● JupyterLabを開き、PyTorch プログラムをアップロード ○ 動作確認もこのタイミングで行う MLSDK を利用する: PyTorch プログラムの準備 JupyterLab インターフェース ユーザーの PyTorch プログラム

Slide 23

Slide 23 text

23 ● 関数化する過程で、静的な計算グラフとして扱う為の前提を整える ○ 計算対象の Tensor の shape, dtype は呼び出し毎に変化しないか ○ Tensor 以外の変数が副作用を起こしていないか ○ model や optimizer が MLSDK に正しく登録されているか ● 例: 機械学習モデルの学習処理部分を関数化したもの MLSDK を利用する: 計算処理の関数化

Slide 24

Slide 24 text

24 ● 特に計算グラフが意図通り出力されていることのチェックが重要 ● 例えば、可視化した計算グラフと見比べるなど... すこし大きすぎる? MLSDK を利用する: 計算グラフのチェック 関数化した計算処理 出力した計算グラフ

Slide 25

Slide 25 text

25 ● 対象とする計算処理が複雑すぎる場合など、出力する範囲を一度狭めた ほうが良いこともある MLSDK を利用する: 計算グラフのチェック 関数化した計算処理 出力した計算グラフ 学習処理全体から推論部分を抜き出したもの

Slide 26

Slide 26 text

26 ● 関数から出力した計算グラフを対象に、PFVM で処理することが可能 ● 利用可能なバックエンド ○ “pfvm:cpu” : LibTorch の CPU 実装を利用 ○ “pfvm:cuda” : LibTorch の CUDA 実装を利用 ■ デバッグ目的以外にも、MLSDK 導入後のコードを CUDA 環境 で運用することも可能 ● 使用するデバイスを指定する API に、上記バックエンドを指定する MLSDK を利用する: PFVM による計算グラフの実行 “pfvm:cpu” もしくは “pfvm:cuda” を指定

Slide 27

Slide 27 text

27 ● 関数化が完了すれば、後の工程は MLSDK バックエンドが自動的に行う ● ただし、コンパイル自体に失敗することもあり、その場合はエラー箇所 の修正が必要になる ○ 例えば、バッチサイズが大きすぎることが原因の OOM など ○ ユーザー側では対処出来ないケースの場合、PFN 側で対応します ● 無事にコンパイル結果 (CompiledFunction) が得られ、その呼び出し結 果 (計算結果) にも問題がなければ、MLSDK API の導入は完了 MLSDK を利用する: コンパイル結果のチェック

Slide 28

Slide 28 text

28 ● Diffusion Policy を MN-Core 2 上で学習させた社内の事例を紹介 ● Diffusion Policy (https://diffusion-policy.cs.columbia.edu/) とは ○ 拡散モデルを応用し、ロボットの行動方策を学習するモデル ○ 1D-CNN をベースとした U-Net アーキテクチャを採用 ● ターゲットとしたベンチマークは Push-T ○ ロボットアームを制御し、T 字のブロックをガイドに合わせる MLSDK の利用例: Diffusion Policy https://diffusion-policy.cs.columbia.edu/#pusht

Slide 29

Slide 29 text

29 ● MLSDK API 導入時に必要だった変更 ○ 活性化関数 Mish を SiLU へ変更 ○ Indexing 処理をマスクと where で置き換え ○ 1D-CNN の追加実装 ● GPU (A30) との学習スループットの比較 MLSDK の利用例: Diffusion Policy MN-Core 2 で学習したモデル のシミュレーション結果 batch size 64 iter/sec MN-Core 2 14.42 A30 6.61

Slide 30

Slide 30 text

30 ● 本日 (12/16) MN-Core Playground というサービスが開始! ● 内容は Supervised Fine Tuning (SFT) の技術デモ MLSDK の利用例:

Slide 31

Slide 31 text

31 ● MLSDK を MN-Core Playground のバックエンドに採用 ● 内部では Qwen 2.5 1.5B をベースに継続追加学習したもの ○ MN-Core 2 上での実行効率は約 17.2 % (67.45 TFLOPS) MLSDK の利用例: SFT 中の Training Loss をグラフにしたもの 学習の完了したモデルは量子化され、ブラウザ上 で動作する他、手元にダウンロードして試すこと も可能

Slide 32

Slide 32 text

32 HPCSDK: HPC 向け開発環境 MN-Core Runtime PFVM Runtime codegen (emit) PFVM FX2ONNX MNCL Host Runtime MNCL Device Translator MNACC codegen (sched.)

Slide 33

Slide 33 text

33 ● MN-Core シリーズ上で、HPC 的な計算を行うための SDK ● HPCSDK の構成要素 ○ MNCL ■ MN-Core シリーズ向け Low-level なプログラミング環境 ■ OpenCL のサブセットとして提供 ○ MNACC (提供予定) ■ #pragma ディレクティブで指示できる並列プログラミング環境 ■ OpenACC のサブセットとして提供 HPCSDK とは

Slide 34

Slide 34 text

34 ● C/C++ のコードから、MN-Core シリーズのアセンブリコードを生成 ○ 生成の過程で LLVM-IR を活用することで、ハードウェアの特性を 考慮しつつ、最適化された SIMD コードを生成 ● Builtin function により、明示的に階層間データ転送を記述可能 HPCSDK: MNCL Device Translator

Slide 35

Slide 35 text

35 ● OpenCL に準拠した API でデバイスをハンドルする仕組み ● 経験者であれば、MN-Core を違和感なく扱うことができる HPCSDK: MNCL Host Runtime

Slide 36

Slide 36 text

36 ● #pragma で記述したソースコードから、MN-Core 向けのデータの配 置、及び各種命令をコンパイラが自動で生成する HPCSDK: MNACC #pragma goose parallel for loopcounter(i,j) result(c[i]) for(i=0;i

Slide 37

Slide 37 text

37 MN-Core SDK: まとめ MLSDK HPCSDK 対象タスク 深層学習 HPC 等 入力 interface Python, PyTorch, ONNX(計算グラフ) C/ C++等 タスク例 画像識別モデルの学習、画像生成、 LLM 流体計算、画像処理(特徴量抽出)等 特徴 深層学習タスクを比較的高レイヤー からコ ンパイルして実行する 利用に MN-Core の専門知識は不要 比較的低レイヤー で記述された計算を、 コンパイルして実行する ある程度の MN-Core の専門知識が必要

Slide 38

Slide 38 text

38 2026/01 に向けたスローガンは、「MN-Core を実際に試せる SDK」 MLSDK v0.4 ● GPU からプログラムを移植するための資料を充実 ● MLSDK の利用例をまとめた Model Zoo を開園 HPCSDK v0.2 ● MNCL 上でカーネルを C/C++ で記述できるように改良 ● MNACC のベータ版の提供開始 MN-Core SDK: 今後の展望 開発に役立てるため、皆様のご意見をお待ちしております。 興味のある方はぜひお試しください。

Slide 39

Slide 39 text

39 MN-Core SDK: Inference SDK を提供予定 対象タスク 深層学習 MLSDK HPC 等 入力 interface PyTorch 等 C/C++等 タスク例 … … 特徴 … … HPCSDK LLM 推論 OpenAI 互換API LLM 推論 OpenAI 互換 API サーバーにより、高速な LLM 推論が可能 Inference SDK

Slide 40

Slide 40 text

40 2012/04-2016/08 株式会社 Fixstars ● GPU, x86, Armといった様々なアーキテクチャでの最適化を経験 2016/09-2023/08 株式会社PEZY Computing ● 独自アクセラレータを開発する会社での開発業務に従事 ● Green500 三連覇を達成したり 2023/09-現在 株式会社Preferred Networks ● MN-CoreでHPCをやる仕事 ● 2025/08よりAICD ソフトウェア開発部 部長 自己紹介 - 坂本亮(Ryo Sakamoto)

Slide 41

Slide 41 text

41 LLM推論特化AIプロセッサ MN-Core Lシリーズ用のLLM推論アプリケー ション開発用SDKです Inference SDK: LLM推論アプリケーション用SDK

Slide 42

Slide 42 text

42 MN-Core L1000 Series ✓ 10x better cost performance to GPUs ✓ up to 4x memory bandwidth to HBMs ✓ Fast inference of 70B+ LLMs on a workstation

Slide 43

Slide 43 text

43 LLM推論(Transformer推論)が要求するもの 1トークン(文字)を出力するために、毎回DRAMに置かれたモデル全体にアクセスする必要性 1トークン(文字)出力するのに、モデルサイズに比例したメモリアクセスが必要となる (70Bモデルであれば fp8使用時に70GB, fp16使用時に140GB) ユーザー当たりの token /s はメモリバンド幅に比例する 出力 出力 出力 出力 出力 出力 入力 入力 入力 入力 入力 入力 出力 出力 出力 出力 出力 入力 入力 入力 入力 入力 KVキャッシュ KVキャッシュ KVキャッシュ

Slide 44

Slide 44 text

44 Reasoning モデルの台頭 ● より深く考える(=推論を何度も繰り返す) ことによって、応答の性能が向上する 推論時スケーリング則

Slide 45

Slide 45 text

45 Reasoning モデルの台頭 ● より深く考える(=推論を何度も繰り返す) ことによって、応答の性能が向上する 推論時スケーリング則 LLMを用いたアプリケーションの性能を向上させるためには、 より高速なメモリが必要!

Slide 46

Slide 46 text

46 L シリーズソフトウェアスタック User Application OpenAI Compatible Inference Engine Model Zoo (PFN selected) Tools for Fine-Tuned Models SDK LLM API SoTA LLM Models Customized Sota LLM Models in-house model

Slide 47

Slide 47 text

47 L シリーズソフトウェアスタック User Application OpenAI Compatible Inference Engine Model Zoo (PFN selected) Tools for Fine-Tuned Models SDK LLM API SoTA LLM Models Customized Sota LLM Models in-house model ● PFNから3つ扱い方を提供し ます ○ 一般公開されているモデ ルをそのまま使う方法 ○ 一般公開されているモデ ルをFineTuneして使う方 法 ○ 自分たちで作ったモデル or 未提供のモデルを自 分たちで対応させる方

Slide 48

Slide 48 text

48 L シリーズソフトウェアスタック User Application OpenAI Compatible Inference Engine Model Zoo (PFN selected) Fine Tuning Tools for Customize SDK LLM API SoTA LLM Models Customized Sota LLM Models in-house model HuggingFaceからモデルをダウンロードしてくる ようなイメージでデプロイ可能です

Slide 49

Slide 49 text

49 L シリーズソフトウェアスタック User Application OpenAI Compatible Inference Engine Model Zoo (PFN selected) Tools for Fine-tuned models SDK LLM API SoTA LLM Models Customized Sota LLM Models in-house model Fine-tuneしたモデルは同様に OpenAI CompatibleなAPIでデプロイ可能です

Slide 50

Slide 50 text

50 L シリーズソフトウェアスタック User Application OpenAI Compatible Inference Engine Model Zoo (PFN selected) Fine Tuning Tools for Customize SDK LLM API SoTA LLM Models Customized Sota LLM Models in-house model 新規モデルに対応するための仕組みを提供予定 各オペレータの実装を新しく追加するなどの工程を 提供することで、ユーザーの皆様が完全新規モデ ルに対応することも可能にする予定です

Slide 51

Slide 51 text

51 MN-Core を使ってみたいあなたへ

Slide 52

Slide 52 text

Making the real world computable