Scribble at 2026-04-03 11:52:25 Last modified: 2026-04-03 13:13:27
Qiita や note の記事、特に技術系の記事がゴミばっかなのって、こういう適当なことを書く人が多いからなんだよね。ちゃんと調べたら、こんな馬鹿なことをする必要なんて何にもないんだよ。英語のページさえ読めたらね。
この記事では、Ollama がディフォールトでは GPU を使わずに CPU しか使わないので、ちゃんとグラフィック・カードの GPU を使ってモデルを走らせるようにしたいという、もちろんごく当然の要望から話を始めている。そして、CPU ではなく CPU のグラフィック機能で Ollama を使うという記事を参考にコピペ記事を書いているわけだが、このように日本人が書いている記事しか参考にしない人というのは、最初に間違ったり無駄なことをする人が記事を書いていると、そこから延々とガラパゴス記事をお互いに量産することとなり、日本語圏が「集合無知」や「無能のエコー・チェインバー」を形成する。しょせん、インターネットがどれほどワールド・ワイドであろうと、それを使う生物が英語も読めないのであれば、情報や知性は一定の範囲に留まるし、このように愚かなレベルや内容でお互いにコピペし合って SEO 的なゴミを増やし続けることになる。そしてもちろん、かようなゴミを食い散らかして開発される「国産 AI」なんてものが無能 AI としてしか生まれないことは必定であろう。まさしく garbage in, garbage out である。
Ollama にグラフィック・カードの GPU で処理させる方法は、こんな愚かな手順を踏まなくても簡単である。
1. CUDA Toolkit をインストールする。
2. PowerShell ターミナルで "% nvidia-smi -L" で GPU の ID を取得する。
3. 環境変数を "CUDA_VISIBLE_DEVICES" で新規作成し、取得した GPU の ID を登録する。
これで、Ollama を起動すれば GPU を使ってくれるのだ。なにも Ollama-CPP 専用の Python 環境を構築したり IPEX-LLM を追加で入れたりする必要など全く無い。しかも、僕も試しにやってみたが、これ Miniforge のインストール時に PATH などを設定しても "init-llama-cpp.bat" のようなプログラムへのパスがぜんぜん通っていなくて動かないじゃないか。ちゃんと自分でやってみて記事を書いてるのかよ。
もちろん、僕が紹介してるやり方のほうが新しくて、いまはできるが、上の記事を書いた当時はできなかったんじゃないかという人はいるだろう。つまり、僕が後知恵で非難しているだけではないのかというわけだ。
まず事実から説明すると、Ollama の Windows 版は2024年2月にリリースされていて、GPU ではなく CPU を使うのは仕様だった。そして、上の記事は「2024年10月28日」に公開されているが、実は GPU ID を指定するという手法は CUDA を扱う環境では標準的なハックであって、"CUDA_VISIBLE_DEVICES" という環境変数そのものは2011年頃からあったものだ。そして、Ollama という特定のプログラムについても2024年の3月くらいには試す人がいたというのが実情だ。寧ろ、これだけシンプルかつリソースの消費も少ないやり方があるのに、どうして上記のような回りくどいやりかただけがアジアの辺境国家で普及するのか、スナップ写真集を出版してる暇があったら岸くんのような社会学者にでも調べてもらいたい。
ついでに、Ollama の使い方すらまともに解説できもしない連中が多いだろうから、簡単に説明しておくと、まずディフォールトで Ollama のサーバを起動して、PHP のコードから CURL 関数でプロンプトを投げるだけだと、レスポンスに相当な時間がかかる。これは、もちろんモデルが "thinking" するからだ。とりわけ、僕が Ollama を使っているのは古い方のマシン(GeForce RTX 2060 6 GB のマシン)であり、メインのマシンは画像を生成するのにパワーを使っているので、プロンプトを作るのにリソースは使えない。となると、RTX 2060 という6年くらい前のエントリー・レベルのグラフィック・カードであるから、ただでさえ現在のモデルを扱うのが大変であるから、推論には長い時間がかかるというわけだ。
いま、僕が Ollama の API で扱っているモデルは、もちろん良質なプロンプトを作ってくれる高性能なモデル、つまり Qwen 3.5 であり、グラフィック・カードのメモリ 6 GB というサイズから考えて、オフロードせずに動かせる限度の 4B を使っている。これで推論させると、たとえば "Osaka" というキーワードだけで 200 words くらいの FLUX.2 Klein 9B 用のプロンプトに膨らましてもらうとすると、だいたい所要時間は10分くらいかかってしまうのだ。これはいかにも遅いので、推論をやめさせると、これが1分以内に短縮される(大量に処理させるとなると、これでも遅い)。ただ、推論をやめさせるためには、プロンプトを作らせるためのプロンプトに "/set nothink" だとか "no_think" だとかを追加するなどと書いている人もいるにはいるが、これはやめたほうがよい。モデルによって有効なキーワードが違うようだし、それもまたプロンプトの一部であるから、モデルが必ず従うとは限らないからである。正しいのは、API の変数として "think" => false を組み込むことである。