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なので、多分、遅いことは開発元もわかっているのだと思います。
計算を最適化すればもっと速い推論ができそうだと言う意味で発展の余地はあります。vllmなどで手軽に試せるようになるといいですね。
すでに提案は上がっているようですが、VLLMでいつサポートされるかは不明です。