Unsloth+Dockerでgpt-ossをA100で動かしたベンチマーク/M3 Ultraと比較
- Ryo Shimizu
- 13 時間前
- 読了時間: 9分
gpt-ossは非常に高性能かつ安定したモデルで、特にBlackwell世代では高速に動作することで知られています。これはFP4、つまり4ビット浮動小数点を使っている効果が大きいと言えます。
FreeAIの継之助のサブモジュールに組み込んだMac Studio 512GBでも、FP4は対応していて、最新のDGX Spark (GB10)に比べても3倍以上の速度で動作します。
この時代になると、さすがにAmpare世代のGPUである継之助には苦しくなってきます。しかし、それでもgpt-ossのような高性能なモデルを高速に動かしたいというニーズは常にあります。
そうした悩みに見事答えてくれたのが、UnslothがDockerとともにリリースした新しいDocker modelというコマンドです。
このコマンドを使うとHuggingFace上にあるUnslothの量子化モデルを手軽に非Blackwell環境で試すことができます。
実際に実行した時に感じた注意事項は以下の通り
・CUDA 12.9以降対応
・複数GPUある場合は、自動的に複数のGPUに分散してしまう
・対応しているのは FP16とUD(動的量子化)、整数量子化
「100以下の素数を全て教えて」というタスクに対し、どのくらいのスピードが出せるか比較します
gpt-oss-20b:FP16 A100x8
$ time echo "100以下の素数を全て教えて" | docker model run hf.co/unsloth/gpt-oss-20b-GGUF:F16
Thinking:
User asks: "100以下の素数を全て教えて" (Japanese) meaning "Tell me all the primes below 100." So we need to list all prime numbers less than or equal to 100. The primes are: 2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97. Let's double-check: primes <=100: 2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97. Yes. Also 101 is >100 so not included. Should mention that 1 is not prime. So output list. Let's respond in Japanese: "100以下の素数は..." Then list. Good.
--
100以下(=100以下の整数)の素数は、次の25個です。
2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97
(1 は素数ではありません。)
real 0m21.016s
user 0m0.185s
sys 0m0.086s
gpt-oss-20b:Q8_0 A100x8
$ time echo "100以下の素数を全て教えて" | docker model run hf.co/unsloth/gpt-oss-20b-GGUF:Q8_0
Thinking:
User asks in Japanese: "100以下の素数を全て教えて" meaning "Give all prime numbers less than or equal to 100." So we must list primes
<=100. Provide list: 2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97. Count 25 primes. Should output in Japanese. Could also explain definition. Provide list. Also maybe show them in order. That is all.
--
100 以下(=100 を含む)までの素数は全部で **25 個**あります。
以下に昇順で並べて示します。
| 素数 |
|------|
| 2 |
| 3 |
| 5 |
| 7 |
| 11 |
| 13 |
| 17 |
| 19 |
| 23 |
| 29 |
| 31 |
| 37 |
| 41 |
| 43 |
| 47 |
| 53 |
| 59 |
| 61 |
| 67 |
| 71 |
| 73 |
| 79 |
| 83 |
| 89 |
| 97 |
これらは、1 と自分自身以外に約数を持たない自然数です。
もし他に関連する質問(例えば「100 以下の素数の個数」や「素数の判定方法」など)があれば、遠慮なくどうぞ!
real 0m16.766s
user 0m0.170s
sys 0m0.093s
FP16よりINT8の方が少し高速になりました。
gpt-oss-20b:Q4_0 A100x8
$ time echo "100以下の素数を全て教えて" | docker model run hf.co/unsloth/gpt-oss-20b-GGUF:Q4_0
Thinking:
The user asks: "100以下の素数を全て教えて" in Japanese: "Please give me all prime numbers less than or equal to 100." They ask "100以
下の素数を全て教えて" which means "Please give me all primes below 100". So they want the list of prime numbers <= 100.
We need to produce all primes <= 100. List: 2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97? Wait also 97. Als
o 101 is not included. Also 97 is < 100. Also 97 is prime. Also 101 is > 100. Also 2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,
67,71,73,79,83,89,97. Also 97. Also 101? No. Also 97. Also 97 is prime. Also 97. Also 97.
Also check: 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97.
But also 2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97. Should also include 97. Also 97. Also 97.
But also 97. Also 97.
Also 97. Also 97. Also 97.
Wait we forgot prime 97. Also 97.
Also 97.
Also 97.
Ok.
We should mention that 2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97. Also 97.
We might also include 2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97. Also 97.
We also need 97.
Ok.
But also 97.
Ok.
Also we might mention 97.
Also 97.
Also 97.
Ok.
We should mention that 2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97. Also 97.
We might also include 2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97. Also 97.
We also need 97.
Ok.
But also 97.
Ok.
Also we might mention 97.
Also 97.
Ok.
We also might include 97.
Also 97.
Ok.
Stop.
We should produce answer: "2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67^[[B, 71, 73, 79, 83, 89, 97".
We should also include 97. Good.
Thus answer.
--
以下は100以下(=100以下)の素数(素数=素数)のすべてです。
```
2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97
```
これらが、100以下のすべての素数です。
real 0m32.732s
user 0m0.266s
sys 0m0.089s
Q4_0(INT4)だと余計な回り道をして思考が遅くなりました。これは量子化ビット数を下げると起きやすい現象と言える。つまり量子化ビット数が低ければ高速というわけでもありません。
Unsloth固有のUD(Unsloth Dynamic)量子化を試してみましょう。
gpt-oss-20b:UD-Q4_K_XL A100x8
$ time echo "100以下の素数を全て教えて" | docker model run hf.co/unsloth/gpt-oss-20b-GGUF:UD-Q4_K_XL
Thinking:
The user asks (in Japanese): "100以下の素数を全て教えて" meaning "Tell me all the primes less than or equal to 100." So we need to list the primes <= 100. The primes up to 100: 2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97. Also 101 is >100 so not included. Also 2 is prime. So answer is listing them. The user may want them in Japanese or just list. Provide the list. Possibly mention that 1 is not prime. Provide explanation. Let's answer.
--
100以下(=100以下)にある素数は次の通りです。
| 2 | 3 | 5 | 7 | 11 | 13 | 17 | 19 | 23 | 29 |
|---|---|---|---|----|----|----|----|----|----|
| 31 | 37 | 41 | 43 | 47 | 53 | 59 | 61 | 67 | 71 |
| 73 | 79 | 83 | 89 | 97 |
- 1 は素数ではありません(1 は「1 のみで割り切れる」だけでなく、1 と自分自身の他に因数がないという定義の下で素数とみなされない)。
- 100 は 2 × 2 × 5 × 5 であり、合成数です。
上記のリストにある 25 個が、100 以下の全ての素数です。
real 0m15.728s
user 0m0.195s
sys 0m0.080s
感動的に速い&賢い!さすが動的量子化。 これならかなり実用的に使えそうという気がします。
さて、MacStudio 512GBの方はどうでしょうか。M3 Ultraは帯域幅も広く、FP4にもネイティブで対応しています。
gpt-oss-20b:MXFP4 (M3 Ultra)
$ time echo "100以下の素数を全て教えて" |ollama run gpt-oss:20b
[GIN] 2025/11/19 - 09:30:22 | 200 | 37.417µs | 127.0.0.1 | HEAD "/"
[GIN] 2025/11/19 - 09:30:22 | 200 | 65.944584ms | 127.0.0.1 | POST "/api/show"
Thinking...
User requests: "100以下の素数を全て教えて" in Japanese: "Tell me all primes below 100." So we list primes <=100. Provide list.
Also maybe explain prime numbers. Provide formatting. Ensure all primes under 100:
2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97. Also note that 1 is not prime. Provide answer in
Japanese. Could also give them in bullet points. Provide maybe a brief explanation. Ensure it's concise.
...done thinking.
100以下の素数(1 は素数ではありません)は以下の通りです。
- 2
- 3
- 5
- 7
- 11
- 13
- 17
- 19
- 23
- 29
- 31
- 37
- 41
- 43
- 47
- 53
- 59
- 61
- 67
- 71
- 73
- 79
- 83
- 89
- 97
これで100以下のすべての素数が網羅されています。[GIN] 2025/11/19 - 09:30:25 | 200 | 2.955202333s | 127.0.0.1 | POST "/api/generate"
real 0m3.060s
user 0m0.024s
sys 0m0.027s
3秒!! 異次元の速さ やはりM3 Ultraは伊達じゃない。LLM専用マシンとしては抜群の戦闘力。
参考までに、Blackwell (GB10)で比較すると
gpt-oss-20b:MXFP4 (GB10)
$ time echo "100以下の素数を全て教えて" |ollama run gpt-oss:20b
Thinking...
The user asks: "100以下の素数を全て教えて" which means "Give me all prime numbers less than or equal to 100." We should respond
with the list: 2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97. They want "all primes under 100". So we
give the list, maybe separated by commas or new lines. The answer is straightforward. Also check if any nuance: "100以下" means
<=100, so include 97 but not 100. So answer: list as above. We'll reply with the list.
...done thinking.
2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97
real 0m4.217s
user 0m0.025s
sys 0m0.052s速い まあもっと速いシステムもありますが。
やはり世代差は如何ともし難いものがありますね。
ただ、コストパフォーマンスを考えると、A100 80GBはディスコン、M3 Ultra 512GBは150万円、GB10を搭載したAcentGX10は60万円 RTX PRO 6000は150万円(ボードのみ)となるので、微妙なところです。また、継之助の場合はA100x8にモデルが分散してしまっているので不利かもしれません。後日A100単体でのベンチマークもとってみたいと思います。
でもなんか変だなあと思って、A100単体で乗ってるマシンでも試してみました。
その結果
gpt-oss-20b:F16 (A100x1)
$ time echo "100以下の素数を全て教えて" | docker model run hf.co/unsloth/gpt-oss-20b-GGUF:F16
Thinking:
User: "100以下の素数を全て教えて" meaning "Tell me all primes less than or equal to 100". So list of primes <=100: 2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97. Should answer in Japanese. Provide explanation maybe.
--
100以下の素数(合成数ではなく、1 とその数自身しか約数を持たない数)は次の25個です。
| 素数 |
|-------|
| 2 |
| 3 |
| 5 |
| 7 |
| 11 |
| 13 |
| 17 |
| 19 |
| 23 |
| 29 |
| 31 |
| 37 |
| 41 |
| 43 |
| 47 |
| 53 |
| 59 |
| 61 |
| 67 |
| 71 |
| 73 |
| 79 |
| 83 |
| 89 |
| 97 |
これらが 1 以上 100 以下のすべての素数です。
real 0m2.664s
user 0m0.034s
sys 0m0.027s
2.6秒!!!速い!
やはり分散のオーバーヘッドが効いていたようです。
ちなみにUD-Q4_K_XLでも試してみました。
gpt-oss-20b:UD-Q4_K_XL (A100x1)
$ time echo "100以下の素数を全て教えて" | docker model run hf.co/unsloth/gpt-oss-20b-GGUF:UD-Q4_K_XL
Thinking:
The user asks in Japanese: "100以下の素数を全て教えて" which translates to "Please tell me all the prime numbers under 100." They want the list of primes <= 100. Provide the list: 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97. Also maybe include 2-100. Provide explanation? Just list. Maybe mention that 100 is not prime. Provide answer in Japanese. Done.
--
100以下の素数は以下の通りです(2から100までの整数で、約数が1とその数自身だけのもの):
2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97
これらが100以下に存在する全ての素数です
real 0m2.295s
user 0m0.038s
sys 0m0.025s
2.29秒。 もはや僅差か?
ただ、全体の傾向として4ビットの方が計算に迷うことが多い気がしました。考えすぎてダメというか。
ちなみにQ8_0とQ4_0でもテストしましたが、最速はQ8_0の2.1秒でした。

F16(A100) | Q8_0(A100) | Q4_0(A100) | UD-Q4(A100) | MXFP4(M3Ultra) | MXFP4(GB10) | |
x1 | 2.66 | 2.12 | 5.02 | 2.29 | 3.12 | 4.22 |
x8 | 21.01 | 16.76 | 32.13 | 15.02 |
かなり迫ってきたとはいえ、VRAMの暴力でMXFP4勢とA100はまだまだ戦えそうで少しホッとしました。
個人的にはgpt-ossは20Bと120Bでそこまで思考力に差がなく、なおかつ20Bの方が高速に動作するため、継之助のように大量の情報を同時並行的に検討する場合は20Bをたくさん回した方が120Bをゆっくり回すより良さそうだなと思っています。同じ理由でGB10も120Bは動くに動きますが、そうすると他のことが何もできなくなってしまうため、20Bで極力済ませるように使うとうまく使えます。
