西川和久の不定期コラム

これは事件だ。“賢い家庭内LLMの夢”を叶える「gpt-oss-120b」、動かし方を教えます

 今年(2025年)の8月5日に、ChatGPTでお馴染みOpenAIからオープンウェイトな「gpt-oss-20b」と「gpt-oss-120b」がリリースされた。このうち前者の20bの方は32GBのメモリがあればそこそこ動くので、すでに実践されている方も多いかもしれない。「ではより大規模で賢い120bをPCで動かすにはどうすればいいのか!? 」……を、3つのパターンに分けてご紹介したい。

OpenAI「gpt-oss-120b」とは?

 8月5日にOpenAIから2つのオープンウェイトなLLMがいきなりリリースされた。1つはgpt-oss-20b、もう1つはgpt-oss-120b。どちらもApache 2.0ライセンスで提供され、商用利用も可能。当初、“あのChatGPTのOpenAI”が出したとのことで結構騒動となった。

 一説によると20bは「o3-mini」、120bは「o4-mini」と同レベルの程度の性能だとか(リンク参照)。本当だとすると、これがローカルPCで動くのであれば、ある意味事件だ。

 gpt-ossの特徴としては、MoE(mixture-of-experts)となっていることだ。ザックリ仕組みを解説すると、LLMでパラメータを常にすべては使わず、全部をアクティブにしておくのは無駄なので、小さく分けたエキスパートをいくつか抱え、実行する時はそのパラメータ数で動作させる点だ。

 アクティブパラメータは20bで3.6b、120bで5.1b。3.6bや5.1bならちょっとしたPCで動作するのは、以前から記事にしてきた通り。つまり強力なGPUなしで、CPUとメモリだけでもそれなりに使える環境となる。

 gpt-oss-20bと120bは、OpenAI純正外にもいろいろなパターンが出ているものの、今回は純正を使用する。これには理由があり、LM StudioだとHarmonyと呼ばれるフレームワークに対応し、「Reasoning Effort(考え中……)」をLow/Medium/Highに切り替えることができるからだ。以降の内容に関しては、特に断りがない限りMediumで試用した。

LM StudioのReasoning Effort(考え中...)をLow/Medium/Highで切り替え
メモリ32GB/Snapdragon X Eliteを搭載したASUS Zenbook SORA(UX3407RA)で動作するgpt-oss-20b。コンテキスト長最大(128k)で27tok/s出ている。メモリ25GB使用

 それぞれのモデルのファイルサイズは約12GBと約63GB。この容量+αがメモリにさえ乗れば理論上は動作する。実際、容量12GBの20bはメモリ32GB/Snapdragon X Eliteを搭載したASUSの「Zenbook SORA(UX3407RA)」でも、約20tok/sの出力速度ほどで動いている。従って20bであればハードルはかなり低い。

 では、120bを動かすにはどうすれば?という話が今回のお題。以降3パターンに分けてご紹介する。

メモリ64GBの「GMKtec EVO-T1」だけで動かしてみる

 上記でgpt-oss-120bのファイルサイズは約63GBと書いた。だとすると常識的に考えて、メモリ64GBのPCだと動くはずがないのだが、なぜかGMKtecのCore Ultra 9 285H搭載ミニPC「 EVO-T1」では遅いものの動作した。

 そのカラクリだが、調べてみたところ、

タスクマネージャーを見るとメモリ63.5GB、GPU 36.2GB
LM StudioのMemory CapacityがRAM 63.5GB、VRAM 36.21GB
  1. タスクマネージャーを見るとメモリ63.5GB、GPU 36.2GBとなっている
  2. LM StudioのMemory CapacityがRAM 63.53GB、VRAM 36.21GBとなっている

 一般的にiGPUの場合、Ryzen AIプロセッサなどでは、メモリ64GB搭載PCでVRAMへ16GBを割り当てるとメインメモリは48GBとなるのだが、Intelはなぜかメインメモリは減らず、実際の搭載メモリサイズのままになっている。

 これをLM Studioがそのまま参照すると、システム的にはメインメモリ63.5GB、VRAM 36.21GBに勘違いしてしまうのだ。通常、どう考えてもリソース不足のシステムではモデルをロードしない仕掛けになっているのだが、これが理由でgpt-oss-120bがロード可能になるようだ。

 ロード時のオプションは、

  • コンテキストサイズはデフォルトの4,096のまま
  • モデルをメモリへ保持: オフ
  • Force Model Expert Weights onto CPU: オン
メモリ64GBの「GMKtec EVO-T1」でのモデルロードオプション。コンテキストサイズはデフォルトの4,096のまま、モデルをメモリへ保持: オフ、Force Model Expert Weights onto CPU: オン

にする。ポイントは3で、その詳細はここにあるが、説明(英語からgpt-oss-20bで翻訳して抜粋)によると、

十分なVRAMがなく、モデル全体をGPU専用メモリにロードできない場合は、この方法が有効です。そういったケースでは、高度な読み込み設定で「Force Model Expert Weights onto CPU」オプションをオンにしてみてください。(省略)
これは llama.cpp の --n-cpu-moe と同じ基盤技術を利用しています。

Force MoE expert weights onto CPU or GPU

とある。この設定により、アテンションのみGPUへ、ほかはCPUへ乗ることになる。百聞は一見に如かず。動作中の画面キャプチャをご覧いただきたい。

gpt-oss-120bが動作中のGMKtec EVO-T1/メモリ。63.5GB中63.3GB使用。残269MB!
gpt-oss-120bが動作中のGMKtec EVO-T1/GPU。36.2GB中2.9GB使用(Vulkan)。7.16tok/s

 GPUメモリは36.2GB中2.9GB使用、メインメモリ63.5GB中63.3GB使用。何と残269MB!のギリギリで動いている。この時の速度は7.16tok/s。コンテキストサイズが4,096。普通にチャットできる速度の最低ラインが15tok/sとすると、半分しか出ていないものの、それでも動くことが重要だろう(笑)。

 この“なぜかiGPUに割り当てたメモリ分、メインメモリが減らない”現象、本機固有なのか、Core Ultra 9 285H+Intel Arc 140Tの仕様なのか不明であるが、お手持ちのPCはどうなのか?興味のある人は一度確認して欲しい。条件が揃えば64GBで(一応)gpt-oss-120bが動くハズだ。

Aiberzy「XG1-370」を96GBにして動かしてみる

 続いてVRAMへ割り振った分、メインメモリが減る一般的なRyzen AI 9 HX 370などでgpt-oss-120bを動かすにはどうすればいいか?という疑問だ。答えは簡単。力技になるがメモリを96GBにすればよい(笑)。

 現在SO-DIMM/DDR5のメモリは比較的安く買え、たとえばCrucial製の96GBキット(48GB 2枚)でも約3万7,000円(Amazon調べ)で購入可能。PC側が対応していれば、これを使わない手はない。96GBに変更後の設定は、

LM StudioではRAM 95.12GB、VRAM 0GBと認識。ガードレールをオフ
GGUFのエンジンをCPUへ
  • BIOSのiGPU/dGPU割り当てをAutoへ。LM StudioのLM Settings→Hardwareでは 95.12GB / 0GBとなる
  • ガードレールをオフ
  • GGUFのエンジンをCPUへ
  • CPUで推論するので、設定→システム→電源→電源モード→最適なパフォーマンスへ

この時、いくつか重要な設定項目がある。まず、LM Studioのガードレールをオフにする。これはシステムに影響を及ぼすようなモデルのロードを阻止するものだが、何に設定してもロード途中で止まってしまう。オフにしコンテキスト長最大128kでも16GBほど残るためPC側への影響はないので、オフにしてしまおう。

 次にGGUFのエンジンをCPUに設定する。通常、CUDA以外だとVulkanになるのだが、CPUだけで推論する時はこの変更が必要となる。

 仕上げはCPUで推論するため、CPUの動作をなるべく速く……ということで、電源モード→最適なパフォーマンスへ変更する。

gpt-oss-120bがコンテキスト長最大128kで動作。13.6tok/sとCPUだけの割にはそこそこ出る

 この状態で実際動かしてみると、コンテキスト長最大の128kにして13.6tok/s。実際使った感じだと15tok/s前後出る(ただし、コンテキストが長くなるとどんどん遅くなる)。メモリは17GBほど余る。CPUは70%前後の使用率……といった感じだ。Vibeコーディングでサクサクコードを書く速度ではないものの、チャットであればそれなりに使えると思う。

 いかがだろうか!? 少し遅いものの、CPUとメモリだけでもgpt-oss-120bが動くのがお分かり頂けただろうか。

 この場合、速度はCPUパワーとメモリ帯域勝負になるため、メモリはDDR5よりLPDDR5X-8000が使えるミニPCなどが欲しいところ。条件を満たし現時点最強がRyzen AI Max+ PRO 395で96GB/128GBを搭載するPCとなる。ネットの情報によるとgpt-oss-120bが約40tok/s程度で動くとのことだ。

 参考までにM4 Max 128GBを搭載した「MacBook Pro 14」だと、コンテキスト長を最大にした状態で70tok/s出る。買って良かったと思った瞬間でもあった(笑)。

 本原稿の打ち合わせを編集担当としていた時、「1tok/s=1万円!? 」という話が。当たらずといえども遠からずか(笑)!?

Aiberzy「XG1-370」を64GBまたは96GB+RTX 4060 Ti(16GB)/OCuLinkで動かしてみる

 XG1-370にはOCuLinkがあるので、手持ちの「GeForce RTX 4060 Ti」(16GB)を使うとどうなるか?も試してみたい。なお、以下画面キャプチャなどはメモリ96GBだが、64GBでも同レベルで動くことは確認している。

 LM Studio以外の別のパターンとして、ここにApple Silicon、NVIDIA、AMDのGPUでgpt-oss-120bを動かす適正値が載っている。なお、NVIDIAの場合は「more than 64GB VRAM」と「Devices with 16GB VRAM」、この2つ。家庭用GPUだと後者(16/24/32GB)になるだろう。

 使用するllama-serverはllama.cppに含まれるコマンドの1つ。Windowsの場合は、適当なフォルダへプリビルドバイナリをダウンロードして展開、gpt-oss-120bも別途ダウンロードしこのフォルダ直下などに入れておく。

※2つのファイルが出てくるので、2つとも上記を展開したフォルダへコピーする

 起動は、ほぼ上記サイトの情報そのままだが以下のようになる、

llama-server --model ../models/ggml-org/gpt-oss-120b-GGUF/gpt-oss-120b-mxfp4-00001-of-00003.gguf --ctx-size 32768 --jinja -ub 4096 -b 4096 -ngl 99 -fa --n-cpu-moe 32 --host 0.0.0.0 --port 8080

 --model以降はgpt-oss-120bの入ってるパスで、実態は複数のファイルに分かれているため「00001-of-00003」のファイルのみ指定

 無事起動すると、localhost:8080や起動しているPCのIPアドレス:8080をWebブラウザで開けばチャット用のWebUIとなる。加えて、OpenAI API互換のエンドポイントにも対応しており、VSCodeのClineでOpenAI API compatibleを選びエンドポイントを指定、使用することも可能だ。

 速度は20tok/sほど出るため、これまで説明した方法よりもう一段上がる。ただし、--ctx-size 32768と、最大128Kの4分の1になってしまうのが残念だ。

 試しに最大の--ctx-size 131072にしたところ、VRAM 16GBの場合、4GBほど共有メモリを使ってしまうのだが、多くがメモリで動いているため、結果その速度に引っ張られ、tok/sは変わらなかった(笑)。であれば、これでllama-serverを起動した方が良い。

llama-server起動
チャット用のWebUIでアクセスしたところ。約20tok/sほど出ている

 20tok/sほど出るようになると、より実践的に使いたくなる。以下の画面キャプチャはVSCode + Clineでgpt-oss-120bへ接続、MCPでMySQLへアクセス可能にし、いろいろ自然言語で問い合わせた結果を掲載した。

VSCode + Clineで動作中のgpt-oss-120b (1/2) 右側はMCPの設定
VSCode + Clineで動作中のgpt-oss-120b (2/2)

 本記事で見せて問題ないデータは、昔WordPressを使って書いた日記程度なので、実用的ではないものの、たとえば販売管理や顧客管理などのデータベースに接続すれば、いろいろな情報を簡単に引き出せるようになる。

 もちろん、gpt-oss-20bでもある程度のことは可能だが、問い合わせに対する理解度やSQL文の組み立てが、gpt-oss-120bではMySQLの初心者レベルから上級者レベルに変わるという感じだろうか。


ミニPC2台、OCuLink DockとGeForce RTX 4060 Ti(16GB)、メモリなどを取っ替え引っ替えチェック中

 以上のようにOpenAI「gpt-oss-120b」は、DDR5メモリを少し多めに搭載、CPUはモバイル系のハイエンド……この条件さえ整えば、10~15tok/s程度の速度が出ることが分かった。Vibeコーディングでバリバリ使いたい人には速度不足であるものの、チャット用途であればそれなりに使える環境だ。GPUを加えるとより一段速くなる。

 ここのところSO-DIMM/DDR5 48GB 2枚の96GBセットがそこそこ安く買えるので、対応しているPCであれば、まず96GBで試してみてはいかがだろうか?

OpenAIの完全無料、ローカル動作LLM「gpt-oss」をCPU内蔵GPUで使ってみる【ウン十万円のGPUなしでも動きます】