MiniMax-01はオープンソースモデルで、その性能はGPT-4oやClaude-3.5、Gemini-2.0 Flashなどの商業モデルやDeepSeek-V3やQwen2.5のようなオープンモデルを上回ると言われ、しかもマルチモーダル版も公開されている上、456B(4560億)パラメータしかないため、当社の社長であるAIスーパーコンピュータ継之助単体でも動作します。

MiniMax-01は、32のエキスパートを用いたMoE(Mixture of Experts)性能を持っています。
動作させるのに少しだけコツが必要だったのでメモをしておきます。
動作させるにはFlashAttnの2.1.0以降をインストールしておく日必要があります。
あとは、公式サイトのサンプルコードの通りに実行すれば自動的にモデルがダウンロードされて推論が実行されます。

デフォルトのサンプルでは、int8(8ビット整数)に量子化して動作させていますが、8つのGPUをフルに動かしているのではなく、層ごとに順番に動かしているようです。
このような動きをさせている場合、exoのような分散化ツールに向いていると言えます。もしかすると推論もexoを使った方が早いのかもしれません。VRAMが合計640GBあればいいので、例えば5090(32GB)を4基積んだマシンを5台用意すれば、もっと高速にパイプラインが走る可能性はあります。
見て想像できるように、推論はまあまあ遅いです。
REPLで色々試せるようにこんな関数を定義しました。
def q(prompt):
messages = [
{"role": "system", "content": [{"type": "text", "text": "You are a helpful assistant created by MiniMax based on MiniMax-Text-01 model."}]},
{"role": "user", "content": [{"type": "text", "text": prompt}]},
]
text = tokenizer.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=True
)
model_inputs = tokenizer(text, return_tensors="pt").to("cuda")
generation_config = GenerationConfig(
max_new_tokens=4096*8,
eos_token_id=200020,
use_cache=True,
)
generated_ids = quantized_model.generate(**model_inputs, generation_config=generation_config)
print(f"generated_ids: {generated_ids}")
generated_ids = [
output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)
]
response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]
print(response)
RoPEスケーリングで学習されているので、長文も出せるだろうと、欲張ってmax_new_tokenを4096*8(32K)にしたら、ものすごく推論に時間がかかってしまいました。
記事執筆時点でもう10分経ってますが、何も出てこないのでとりあえず結果が出たらまた追記します。今はとりあえず「推論が動いた」という事実だけ描いておくことにします。
デフォルトのmax_new_tokensは20なので、多分、遅いことは開発元もわかっているのだと思います。
(1/18 15:27追記)
「UberEats配達員を主人公にしたラブストーリーを作って」と指示したら、こんなのが出てきました。
タイトル: 運命の配達 第一章: 偶然の再会 主人公の名前は佐藤健太、28歳。UberEatsの配達員として働きながら、夢を追いかけている。健太は大学時代に映画監督を志していたが、経済的な理由で一旦は諦め、今は配達の仕事で生計を立てている。 ある雨の日の午後、健太はいつものように注文を受け、バイクで配達に向かっていた。目的地に着くと、そこには見覚えのある顔があった。大学の同級生で、かつて健太が一目惚れした女性、桜井美咲だった。美咲は大学卒業後、出版社に就職し、今は編集者として働いている。 「健太くん?久しぶり!」 美咲の明るい声に、健太は驚きつつも嬉しさが込み上げてきた。二人はしばし立ち話をし、連絡先を交換して別れた。 第二章: 再会の予感 その日から、健太の心は美咲のことでいっぱいになった。偶然の再会が運命のように感じられ、彼は彼女にアプローチしたいと思うようになった。しかし、健太は自分の現状に自信が持てず、躊躇していた。 一方、美咲も健太との再会をきっかけに、彼のことを考えるようになった。大学の頃、健太の映画に対する情熱に惹かれていた彼女は、今もなおその情熱が消えていないことに気づいた。 ある日、美咲は健太にメッセージを送った。「最近、面白い映画ないかなと思って。健太くんのおすすめ教えてくれない?」 このメッセージがきっかけで、二人の交流が始まった。健太は自分が影響を受けた映画をリストアップし、美咲に送るようになった。美咲はその映画を鑑賞し、感想を送り返す。そんなやり取りが繰り返されるうちに、二人の距離は急速に縮まっていった。 第三章: 夢への挑戦 ある日、美咲は健太に提案した。「健太くん、映画監督になる夢、諦めないで。私が編集者として協力できることがあるかもしれない。」 この言葉に背中を押され、健太は再び映画制作への情熱を取り戻した。彼は短編映画の脚本を書き始め、美咲はその脚本を出版社を通じて関係者に紹介することを約束した。 数ヶ月後、健太の脚本が小さな映画賞に応募され、見事入選を果たした。この成功をきっかけに、健太はプロの 映画監督としての道を歩み始めることができた。 第四章: 新しい始まり 映画の公開初日、健太と美咲は一緒に映画館を訪れた。スクリーンに映し出される映像を見ながら、二人はお互いの夢が叶ったことを実感していた。 映画のエンドロールが流れ終えると、健太は美咲に向き直り、静かに言った。「美咲、君がいたからここまで来れた。ありがとう。」 美咲は微笑みながら、健太の手を握り返した。「私も、健太くんがいたから頑張れた。これからも一緒に夢を追いかけていこう。」 二人の手を取り合った瞬間、健太は確信した。これが彼にとって本当の幸せなのだと。 エピローグ: 未来への一歩 健太はプロの映画監督として新たなプロジェクトに取り組み、美咲は彼の作品のプロデューサーとして支えるようになった。二人は仕事だけでなく、プライベートでもパートナーとして支え合い、共に未来への一歩を踏み出した。
計算を最適化すればもっと速い推論ができそうだと言う意味で発展の余地はあります。vllmなどで手軽に試せるようになるといいですね。
すでに提案は上がっているようですが、VLLMでいつサポートされるかは不明です。