(作業メモ 20250716) ローカルでLLMを動かす

16 7月

どこかのサイトで、マイクロソフトが開発した phi-4 はビデオカードのメモリーが 16GB あたりでも動くと書いてあって、それなら利用できそうだと思って色々と試してみた記録です。上の写真の本『ローカルLLM実践入門』に書いてある通りにやってみました。ソフトのバージョンが変わっているせいか、上手く利用できないものもありました。

最初に試したパソコンの仕様は下記です。

  • CPU : intel core i5-9500
  • メモリ : 64GB
  • マザーボード : ASRock Z390 Extreme4
  • ビデオカード : RTX 3060 12GB
  • OS : windows 11

本に従って、Jan というソフトを利用しました。インストールは Jan と Nvidia のドライバーと CUDA を入れたぐらいです。いま気づいたのですが、Jan のサイトを見ると CPU への要件として、AVX2 以降の機能が必要とあります。LGA 1150 か LGA 2011-v3 以降の CPU となりますが、このパソコンは LGA 1151 で、一応満足していました。Jan のバージョンは 0.6.4 です。

phi-4:14b は無事利用することができました(上図)。分数の計算について、質問をしてみました。スピードは 29 tokens / sec です。ビデオカードのメモリ内に必要なものが収まりきっているのではないでしょうか。

llama3.3:70b を利用してみました。かなりサイズの大きなものです。ダウンロードファイルが 40GB ぐらい。読み込むと、ビデオメモリも本体のメモリも限界まで占有しています。読み込みに 5 分以上かかります。CPU の利用率は3割から5割程度でした。

同じように、分数の計算を質問してみました。計算はできていますが、見慣れぬ”昆数”という言葉が出てきています。混合数(帯分数)のことなのか?0 tokens / sec となっていますが、0.5 ぐらいはありそうでした。しかし動くことに驚きます。

Local API サーバーを起動してみます。設定は下図のようにしました。Trusted Hosts になぜか自分自身を書きます。通信してくる相手先を書きそうなものですが?

通信相手(リクエストする方)には Python が必要です。これは Anaconda を利用しました。Anaconda のインストールに関しては、以前に書いた記事の通りにやりました。Jan という環境を作成して、openai を入れました。

送りつける python コードは、本にある通りです。

通信が上手くいって返事が返ってきました。

他のパソコンを使用してみました。ビデオカードを2枚にしました。

  • CPU : intel core i9-10920X
  • メモリ : 64GB
  • マザーボード : ASUS X299 PRO
  • ビデオカード : RTX 4060ti 16GB
  • ビデオカード : RTX A4000 16GB
  • OS : windows 11

Jan のバージョンが少し古くて、 0.517 です。なんの設定もしていないのですが、両方のビデオカードが利用されています。

上図では llama3.3:70b を利用しています。1.95 tokens / sec ぐらいになりました。さらにビデオカードを追加すれば、もっと速くなるのでしょうか?この CPU は、LGA 2066 です。CPU レーンの数は 48 です。このマザーボードにも、あと何個か使えそうな拡張スロットはあるのですが、ビデオカードの厚みから隠されてしまって使用できないスロットがあります。ライザケーブルを利用することを考えるべきか?

ライザケーブルを入手しました。それを使ってビデオカードを追加します。電源も容量が不足すると思って、二つ電源をつなげるように細工しました。といっても、Silverstone の SST-PP10 というデュアル電源同時起動ケーブルなるものを購入しただけですが。Jan が動いているところのキャプチャーをあげます。Jan のバージョンを 0.6.5 にあげました。バージョンによって、ビデオカードのメモリーの利用具合が異なることがしばしばです。まずはハードウェアの情報ですが

本体のメモリは相変わらずかなり占有しています。ビデオカードはいずれも 16GB のメモリのものを 3 枚使用しました。今回の Jan のバージョンはぎりぎりまでビデオメモリーを利用しています。次は、質問をしてみたところです。

8 tokens / sec ぐらいの速度になりました。 結構速くなりました。推論しているときの CPU の占有率は数パーセントぐらいで、だいぶ下がりました。

めどが立ったので、本来の場所に移動させます。この配置での運用になりそう。ライザケーブルを長いものに交換しています。安いものでもあるのですが、少し遅くなった(7 tokens / sec)ような気がして、気になります。ビデオカードを立てているのは、長尾製作所というところのグラフィックボード ディスプレイ台(NB-VGA-DP01)です。今は二つの電源を使っていますが、1000 W ぐらいの電源なら、ひとつで済むかもしれません。

gemma3:27b を使ってみました。Jan のバージョンは 0.6.4 です。上図がビデオカードの利用具合です。小説家「三島由紀夫」について質問をしてみました。文体の特徴などを聞いた後、下記のような質問をしてみました。

    「夏、会社を早めに退社して、外に出て、空を見上げると、入道雲が高く立ち上っているのが見えた」というような内容を、三島風の文体で書くとすると、どんな感じになりますか?

これに対する返事が下記です。

    承知いたしました。三島由紀夫風に「夏、会社を早めに退社して、外に出て、空を見上げると、入道雲が高く立ち上っているのが見えた」という内容を記述すると、以下のようになります。

    六月の末、会社という牢獄を、いち早く棄てて、灼熱の午後に放たれた。アスファルトは陽炎を孕み、視界を歪ませる。ふと見上げれば、鉛色の空に、巨躯を誇る入道雲が、神話の怪物を思わせる形状で、悠然と屹立していた。

    その白亜の山頂は、天蓋を突き破るように高く、そして、暗雲の淵は、底知れぬ深淵を湛えているようだった。それは、刹那の美であり、同時に、破滅の予兆でもあった。都会の喧騒を忘れ、ただ、その異様な存在を仰ぎ見る。胸中に沸き上がるのは、歓喜か、あるいは、微かな絶望か。

    陽は傾き、入道雲は、血潮のような茜色を帯び始める。その壮麗な光景は、一瞬の幻影のように、やがて、夏の空に溶け込んでいくのだろう。

面白い。現在形のはさみ方も良いです。他に何か他に試してみたい文章はあるかと聞いてきたので、再度下記のような文章を依頼してみました。

    そこは、やはり海の描写がいいですね。「別荘の窓から、ある男が、双眼鏡で海を眺めている。彼は海と空の境に双眼鏡を向けている。」という内容を三島風にお願いします。

この返事は、下記のようなものでした。

    承知いたしました。「別荘の窓から、ある男が、双眼鏡で海を眺めている。彼は海と空の境に双眼鏡を向けている。」という内容を、三島由紀夫風に記述すると、以下のようになります。

    午後の光が、別荘の障子に薄絹のように降り注ぎ、男は静かに窓辺に佇んでいた。彼の視線は、碧波に煌めく海へと注がれ、手には黒光りする双眼鏡が握られている。

    彼は、あたかも何かを探し求めるように、海面を舐め回すように、その双眼鏡を滑らせた。やがて、その視線は、海と空の曖昧な境界線に定着する。そこは、天と地が混じり合い、現実と幻影が交錯する、危うい領域だった。

    双眼鏡を覗き込む彼の瞳は、深い淵のように静まり返り、海と空の狭間に潜む、何かの兆候を捉えようとしているかのようだった。それは、禁断の果実を求めるアダムの眼差しにも似ていた。

    海は、無慈悲なまでに静かで、ただ、白い波濤が、絶え間なく打ち寄せている。その音は、男の心に、微かな焦燥感を呼び起こし、同時に、深淵なる孤独を呼び覚ます。

    彼は、海と空の境目で、一体何を見出そうとしているのだろうか。それは、虚無の彼方にある、永遠の真理なのか。それとも、ただ、刹那の美に酔いしれるための、虚しい探求なのか。

これも良い。llama3.3:70b に切り替えて同じことをやってみたのですが、三島由紀夫に関しては gemma3:27b の方が面白い答えをしてきます。

20250917 更新