AI・機械学習
Antirez/h3.c: Mac用MiniMax H3推論エンジン
Antirez/h3.c: MiniMax H3 inference engine for Mac computers (github.com)
要約
Antirez氏が開発したh3.cは、Apple Silicon Mac向けに最適化されたMiniMax-H3推論エンジンです。Metal APIを活用し、プロンプトから動画や音声を生成する機能や、画像・動画・音声を参照する機能(Ref2VA)を実装しています。コマンドラインインターフェース(CLI)を通じて、モデルの検査、インタラクティブなセッション、高速な動画生成、参照品質に近い動画生成など、様々な設定で推論を実行できます。
全文翻訳
h3-metal Apple Silicon向けのネイティブMiniMax-H3推論。
このプロジェクトは、動作する垂直スライスのシーケンスとして構築されています。まず、決定論的なホスト/モデルメタデータ、次にポータブルなMetalブロックの同等性、プロンプトエンコーディング、プロンプトから動画/音声への変換、最初/最後のフレーム条件付け、そして順序付けられた参照です。
プロンプトから動画/音声への変換、最初/最後のフレーム条件付け、および順序付けられたRef2VA画像/動画/音声参照は、エンドツーエンドで機能します。
現在の作業は、M3 MaxおよびM5 MaxでのH3固有のMetalパフォーマンスとメモリ最適化の増分です。
チュートリアル
1. モデルのビルドと検査
例では、Hugging Faceのスナップショットが./MiniMax-H3にあり、FFmpegとFFprobeがPATHで利用可能であることを前提としています。
make -j8
mkdir -p outputs
./h3 --info -d ./MiniMax-H3
--infoはモデルのレイアウトをチェックし、すべての重みをマッピングしたりメディアを生成したりせずに、選択されたMetalデバイスを表示します。
完全なCLIリファレンスについては、./h3 --help を実行してください。
-pなしで、同じバイナリはIrisスタイルのインタラクティブセッションを開始します。
./h3 -d ./MiniMax-H3 --width 512 --height 512 --steps 20
プロンプトを入力して番号付きの動画を生成します。
セッションは、正確なBF16プロンプト条件付け、準備されたDiT、およびビデオデコーダーをメモリ内に保持するため、同じプロンプトを別のシードで繰り返しても、それらを再度ロードしてエンコードする必要がありません。
便利なコマンドは、!status, !seed random, !seconds 2, !show, !save output.mp4, および !cache です。
完全な短いリストについては、!help を使用してください。
最初/最後のフレーム条件付けはセッションで永続的です。
h3> !first opening.png
h3> !last ending.png
h3> カメラが被写体の周りをゆっくりと移動します。
アンカーを削除するには、!first clear または !last clear を使用してください。
生成された動画は、起動時に表示されるセッションディレクトリに書き込まれます。
一般的なRef2VA条件付け画像については、代わりに!ref-image PATH を使用してください。
画像は順序で追加され、モデルには<Picture 1>, <Picture 2> などとして公開されます。ファイル名にモデルに対する意味はありません。
h3> !ref-image person.png
h3> Picture 1に示されている人物にカメラに向かって手を振らせてください。
!refs は現在の順序をリストし、!ref-remove N は1つを削除し、!refs clear はすべてを削除します。
Ref2VA参照は、!first/!lastアンカーと混在させることはできません。
2. 最初の高速動画を作成する
検証済みのバランスの取れたプリセットから開始します。
これは24fpsで22フレーム(約0.92秒)を生成し、サポートされているグラフィカルターミナルで各デノイズ遷移後に進化する中間ビデオフレームを表示し、フェーズタイミングを表示します。
./h3 --profile \
-d ./MiniMax-H3 \
-p "A red fox walks through fresh snow in a pine forest. Medium tracking shot, natural winter light, realistic fur, soft footsteps and wind."
--width 512 --height 512 \
--frames 22 --steps 20 \
--layers 45 --reuse 2 \
--show \
-o outputs/fox-fast.mp4
これは意図的に最も攻撃的な構成ではありません。
--steps 20 はデフォルトの20回のデノイズパスを実行します。
--reuse 2 は、すべての20回ではなく11回の新しいデノイザー速度を計算し、スキップされた遷移を外挿します。
--layers 45 は50個のトランスフォーマーブロックのうち45個を実行し、時間とユニファイドメモリの使用量を削減します。
--show はオプションです。
Kitty/GhosttyおよびiTerm2/WezTerm/Konsoleグラフィカルプロトコルをサポートしています。
常駐プレビューVAEをロードし、各Euler遷移後に1つの代表的な中間ビデオフレームを表示し、その後すべての最終フレームを表示します。
表示寸法はデフォルトで2倍になり、画像はmacOS Retina画面で意図した論理サイズになります。HiDPIでないディスプレイでは--zoom 1を使用してください。
これにより、プレビューデコード時間と約10GiBの一時的なモデル常駐が追加されます。--showなしの実行は変更されません。
--profileはオプションであり、異なる生成パスを選択しません。
最初のプロセス呼び出しでは、モデルロードとファイルシステムキャッシュのコストもかかります。
繰り返し実行を使用してパフォーマンスを比較し、ワークロードは熱スロットリングに敏感であるため、マシンがウォームアップしている間に代替バリアントを試してください。
非常に短いイテレーションのために、直接4回のデノイズパスを要求します。
./h3 --profile \
-d ./MiniMax-H3 \
-p "A red fox walks through fresh snow in a pine forest. Medium tracking shot, natural winter light, realistic fur."
--width 512 --height 512 --frames 22 \
--steps 4 --layers 50 --reuse 1 \
--show \
-o outputs/fox-four-step.mp4
--steps N は常に正確にN回のデノイズパスを意味します。
4〜7回のパスは、低予算比較で勝利したのと同じスケジュールを使用します。4から7に増やすと、詳細とモーションが徐々に向上します。
このような小さな予算では--reuse 1を維持して、要求された各パスでモデルを実行できるようにします。
--showは各パスの後に1つのプレビューを表示します。
ほとんどの目に見えるクリーンアップは長い実行の後半に発生するため、いくつかのテールヘビーなスケジュールが評価されました。
それらは初期のコンポジションアップデートを十分に保持せず、織り交ぜられたテクスチャ、弱いモーション、またはクリップされた色を生成しました。
保持モードは、1つの終端ポイントを持つリリースされた線形ベースグリッドを使用します。
512平方、22フレームのキツネテストでは、選択された4パスの結果は、29パスの参照に対して0.556のフルビデオSSIMでした。独立したサーファーテストでは0.547を測定しました。
4パスのデノイズはM5 Maxで約3.5秒かかりましたが、参照は26.4秒でした。
3. 参照品質に向けて移動する
品質を評価するときは、一度に1つのコントロールを変更します。
まずすべてのレイヤーを復元し、次にすべてのデノイザー評価を復元し、最後にデフォルトの20パススケジュールをより遅い50パス参照に引き上げます。
./h3 --profile \
-d ./MiniMax-H3 \
-p "A red fox walks through fresh snow in a pine forest. Medium tracking shot, natural winter light, realistic fur, soft footsteps and wind."
--width 512 --height 512 \
--frames 22 --steps 50 \
--layers 50 --reuse 1 \
-o outputs/fox-close.mp4
デフォルトは--steps 20 --layers 50 --reuse 1です。このクローズパスについては--steps 50を明示的に維持してください。
これは50回の完全な50ブロックデノイザーフォワードを実行し、デフォルトよりもはるかに高価ですが、高速モードが被写体、解剖学、モーション、またはコンポジションを変更した場合の正しいオラクルです。
MLXとの数値的なピクセル同一性は、乱数エンジンと実行エンジンが異なるため期待されません。描画されたコンテンツとモーションは一致するはずです。
4. スピード/品質プリセットを選択する
これらのコントロールは、特に言及しない限り独立しています。
コントロール | 遅い参照 | デフォルト | 攻撃的 | 主な影響
---|---|---|---|---
デノイズパス | --steps 50 | --steps 20 | --steps 4..7 | パス数は常に実際のデノイズパスを指します。
全体のデノイザー再利用 | --reuse 1 | --reuse 2 | --reuse 3 | 20ステップで: 20, 11, または 8回の新しいDiT評価。
アクティブなDiTブロック | --layers 50 | --layers 45 | --layers 40 | より少ないブロックは計算と常駐トランスフォーマー重みを削減します。
コア残差再利用 | --core-reuse 1 | --core-reuse 4 | --core-reuse 6 | ステップごとにパッチ/ヘッドワークをリフレッシュしますが、高価なコアの実行頻度は低くなります。
トークン削減 | オフ | オプション | --token-reduction | 中間ブロック内の水平ビデオトークンをペアにします。より高速ですが、コンポジションを変更する可能性があります。
内部キャンバス出力サイズ | 512平方出力用384x384 | 320x320 | | DiT/VAEを小さく実行し、vImageでアップスケールします。
M5では、--use-int8-row-fc2はFC2行ごとに1つのアクティベーションスケールと単一のフル幅TensorOps積を使用します。
これはグループ化されたint8よりも数値的に保守的ではないためオプションです。
逆テストでは、完全なデノイザーフォワードを約2.6%削減しました。
一致した4ステップのキツネとサーファーの動画は、同じ被写体、設定、およびモーションを維持しました(フルビデオSSIM 0.919および0.828)。
インタラクティブセッションでは、!int8-row-fc2 on を使用します。
--reuseと--core-reuseは相互排他的です。
レイヤーの薄化は、どちらか一方と組み合わせることができます。
最初のコマンドを、出力解像度を維持しながらより速くするために、トークン削減を追加します。
./h3 --profile \
-d ./MiniMax-H3 \
-p "A surfer riding inside a sharp blue ocean wave, one rider and one white board, realistic spray."
--width 512 --height 512 --frames 22 --steps 20 \
--layers 45 --reuse 2 --token-reduction \
-o outputs/surfer-fast.mp4
検証済みの512平方形状で、トークン削減はIT M5 Maxで45レイヤー+リユース2デノイズプロファイルを16.69秒から12.60秒に削減しました。
独立したキツネとサーファーのレンダリングは一貫性を保ちましたが、コンポジションはクローズパスからより大きく逸脱する可能性があります。
攻撃的なプレビューのために、内部で320平方でレンダリングし、要求された512平方出力にアップスケールします。
./h3