OllamaでローカルLLM

[2025-04-19] 4ビット量子化を最適化したQAT版がOllamaからも出ました。以下で例えば gemma3:12b となっているところを gemma3:12b-it-qat のようにして試してみてください。8ビット量子化以上を使っているなら不要です。

外部に出すのがはばかられる情報を扱う場合や、費用をかけたくない場合、再現性が必要な場合、rate limitを気にせず大量ループ処理したい場合に、ローカルLLMは魅力的である。ここでは Ollama(オラーマ)というツールを使ってコマンドラインまたはPythonからLLMを使う方法を説明する。Ollamaは llama.cpp から派生したたいへん使いやすいツールである。

ここではMacを使う。OllamaサイトよりバイナリのZIPファイルをダウンロードし、展開してOllama.appを /Applications(あるいは適当な場所)に移動し、起動すると /Applications/Ollama.app/Contents/Resources/ollama へのシンボリックリンクが /usr/local/bin にできる。また、バックグラウンドのプロセスが起動し、メニューバーにOllamaアイコンが常駐する。利用はターミナルからollamaコマンドを使って行うか、後述するようにPythonなどを使ってバックグラウンドのプロセスのAPIを呼び出す。

まずは適当なモデルをダウンロードして動かす。ここではGoogleの Gemma 3(ジェンマ・スリー)を使ってみる。

OllamaのGemma 3のページを参考にして、デフォルトの4ビット量子化(Q4_K_M)された4サイズのGemma 3のうち適当なものを選ぶ。メモリ8GのMacなら4B、メモリ16GのMacなら12B、それ以上なら27Bを使えばよかろう(Bはbillionつまり10億パラメータ)。例えば12Bモデルなら、ターミナルに

ollama run gemma3:12b

と打ち込むと、初回はモデルのダウンロードが始まり、それが終われば入力を受け付ける状態になるので、何か質問すれば、答えが返る。ヘルプは /?、終了は /bye である。

ダウンロードしたモデルは ~/.ollama(ホームディレクトリ🏠の .ollama フォルダ)に入る。ドライブの容量が足りなければ、あとで外部ドライブにモデルを移動してシンボリックリンクを張ってもよい。

私はメモリ128GのMac Studioを買ったので、4ビットでなくても8ビットでも、おそらく16ビットでも大丈夫そうだが、8ビットあれば十分だ。OllamaのGemma 3のページ のドロップダウンメニューの最後の「View all」から探すと、8ビット量子化の gemma3:27b-it-q8_0 が見つかる。これを実行してみよう。

ollama run gemma3:27b-it-q8_0

モデルの詳細は /show info で調べられる:

>>> /show info     
  Model
    architecture        gemma3    
    parameters          27.4B     
    context length      131072    
    embedding length    5376      
    quantization        Q8_0      

  Capabilities
    completion    
    vision        

  Parameters
    top_p          0.95               
    stop           "<end_of_turn>"    
    temperature    1                  
    top_k          64                 

  License
    Gemma Terms of Use                  
    Last modified: February 21, 2024    

8ビット27Bなら27Gバイト+αのメモリを使う。+αの量はコンテクスト長(扱える最大トークン数、num_ctx)にも依存する。Gemma 3はコンテクスト長128Kまで対応する(1Bモデルは32Kまで)。メモリ・CPUの使用率はMac標準のアクティビティモニタで表示できるが、GPUの使用率も含めてグラフィカルに表示できる mactop は便利である。

パラメータを変えるには /set parameter を使う。例えばコンテクスト長を131072、温度を0.1、最大出力トークン数を8192に設定しよう:

/set parameter num_ctx 131072
/set parameter temperature 0.1
/set parameter num_predict 8192

Emacsから使う方法は こちらこちら に書いた。

Pythonから使う方法は PythonでOllamaを使う 参照。