Ollama を使ってローカルの大規模モデルを簡単に操作する - 少数派#
#Omnivore
はじめに#
4 月に、私は LLaMA のオープンソースを利用して、大規模言語モデル(LLM)の一般化運動や、オープンソースプロジェクトの名称に頻繁に登場する「アルパカ」ファミリーについて整理を試みました。その中には重要な役割を果たしているllama.cppプロジェクトも含まれています。
当時、アルパカファミリーはオープンソースの大規模モデル分野で初めて姿を現し、その周辺エコシステムは好調でした。気がつけば年末が近づき、過去 3 四半期を振り返ると、Meta が 6 月に発表したより強力でオープンな Llama 2 を節目として、オープンソースコミュニティは再び止められない勢いで適応、進化、実装を進めています。
現在、LLM はもはや高価な GPU と同義ではなく、ほとんどの消費者向けコンピュータで推論を実行できるアプリケーションとなっています —— 一般に「ローカル大規模モデル」と呼ばれています。
Llama 2 三件套
優雅さは簡単ではない#
経験によれば、16 ビット浮動小数点精度(FP16)のモデルは、推論に必要な VRAM(GB 単位)はモデルのパラメータ数(10 億単位)の約 2 倍です。これに基づくと、Llama 2 7B(70 億)は推論に約 14GB の VRAM を必要とし、これは明らかに一般的な家庭用コンピュータのハードウェア仕様を超えています。参考までに、GeForce RTX 4060 Ti 16GB グラフィックカードの市場価格は 3000 元を超えています。
モデルの量子化(quantization)技術は、VRAM の要求を大幅に削減できます。4 ビット量子化の例では、元の FP16 精度の重みパラメータを 4 ビット整数精度に圧縮し、モデルの重みのサイズと推論に必要な VRAM を大幅に減少させ、FP16 の 1/4 から 1/3 の VRAM で済むことを意味し、約 4GB の VRAM で 7B モデルの推論を開始できます(もちろん、実際の VRAM の要求はコンテキストの内容の蓄積に伴い増加します)。
同時に、llama.cpp プロジェクトは C/C++ で推論コードを再構築し、PyTorch による複雑な依存関係を回避し、純粋な CPU 推論や Apple Silicon を含むさまざまな基盤計算アーキテクチャの対応を広げました。Llama アーキテクチャの人気により、llama.cpp の量子化と推論能力は、阿里云の Qwen シリーズや零一万物の Yi シリーズなど、同じアーキテクチャのオープンソース大規模言語モデルにほぼシームレスに移行できます。
llama.cpp は多くの利点をもたらしましたが、実際に体験しようとすると、モデルの重みを取得し、プロジェクトコードをクローンし、モデルを量子化し、環境変数を設定し、実行可能ファイルを構築するなど、多くのステップを経てコマンドラインでテスト質問をする必要があることに気づきます。手動で調整する必要があるパラメータは数十に及びます。
そのため、長い間、ローカル大規模モデルと llama.cpp に基づくアプリケーションは、少数のギークや研究者のサークルに限られており、高いハードルが多くの一般人を遠ざけていました。
そんな中、Ollamaが登場しました —— 簡潔で使いやすいローカル大規模モデル実行フレームワークです。Ollama を中心としたエコシステムが前面に出るにつれ、より多くのユーザーが自分のコンピュータで大規模モデルを簡単に操作できるようになりました。
公式サイト
すぐに始める#
Ollama のインストールは非常に簡単で、macOS では公式サイトからダウンロードしたインストーラを開いて実行するだけです。Windows ではまだインストーラが提供されておらず、公式にはWSL 2を使用して Linux 方式でコマンドを使ってインストールすることが推奨されています:
% curl https://ollama.ai/install.sh | sh
** 注意:** 常にcurl | sh
スタイルのインストールスクリプトのリスクを確認してください。
Docker に慣れている場合は、公式イメージを直接使用することもできます。
ollama --version
コマンドを実行してバージョンを正常に確認できれば、Ollama のインストールは成功したことになります。次に、pull
コマンドを使ってオンラインモデルライブラリからモデルをダウンロードして遊ぶことができます。
中国語で微調整された Llama2-Chinese 7B モデルを例にとると、以下のコマンドは約 4GB の 4 ビット量子化モデルファイルをダウンロードし、推論には少なくとも 8GB のメモリが必要で、16GB の搭載を推奨します。
% ollama pull llama2-chinese
ダウンロードが完了したら、run
コマンドを使ってモデルを実行できます。メッセージをコマンドの後に直接付加するか、空白のままにして対話モードに入ることができます。対話モードには、スラッシュで始まるいくつかのコマンドが組み込まれています:
# 単一入力
% ollama run llama2-chinese "空はなぜ青いのですか?"
# 対話モード
% ollama run llama2-chinese
>>> /?
利用可能なコマンド:
/set セッション変数を設定
/show モデル情報を表示
/bye 終了
/?, /help コマンドのヘルプ
"""を使用してマルチラインメッセージを開始します。
>>> 空はなぜ青いのですか?
この質問は一般的な論争です。一部の科学者は、空の青さは霧や雲の中の微細な粒子が反射した光の色であると考えていますが、他の人は地球自身の温度の影響によるものだと考えています。現在、この問題は一般的な論争です。一部の科学者は、空の青さは霧や雲の中の微細な粒子が反射した光の色であると考えていますが、他の人は地球自身の温度の影響によるものだと考えています。現在、まだ公認の説明はありません。
Ollama は実行中のハードウェアを判別し、可能な場合は GPU 加速を呼び出すため、推論中にアクティビティモニターやタスクマネージャーを開いて確認することをお勧めします。
これで、手の届くところにあるローカル大規模モデルを体験できました。
外装をつける#
コマンドライン形式が使いにくいと感じる場合、Ollama には周辺ツールの一連が用意されており、ウェブ、デスクトップ、ターミナルなどのインターフェースや多くのプラグインと拡張が含まれています。
Ollama が迅速にこのような豊かなエコシステムを形成できたのは、プロジェクト開始時から明確な位置付けがあったからです:より多くの人々が最も簡単で迅速な方法でローカルで大規模モデルを実行できるようにすることです。したがって、Ollama は単に llama.cpp をラッピングするのではなく、多くのパラメータと対応するモデルをパッケージにまとめて提供しています。Ollama は、簡潔なコマンドラインツールと安定したサーバー APIに相当します。これにより、下流のアプリケーションや拡張が大いに便利になります。
Ollama GUI に関しては、好みに応じて多くの選択肢があります:
Web 版:Ollama WebUIは、ChatGPT に最も近いインターフェースと最も豊富な機能を持ち、Docker でのデプロイが必要です;
Ollama WebUI の例、画像出典はプロジェクトのホームページ
ターミナル TUI 版:otermは、完全な機能とショートカットキーのサポートを提供し、brew
またはpip
でインストールできます;
Oterm の例、画像出典はプロジェクトのホームページ
Raycast プラグイン:Raycast Ollamaは、私が最もよく使う Ollama のフロントエンド UI で、Raycast の利点を継承し、選択またはコピーした文を直接コマンドとして呼び出すことができ、スムーズな体験を提供します。約 8 ドル / 月の Raycast AI の代替として、Raycast Ollama は Raycast AI のほとんどの機能を実現し、Ollama やオープンソースモデルの進化に伴い、Raycast AI がサポートしていない多モーダル機能もサポートする予定で、無限の可能性を秘めています。
Raycast AI を再現した Raycast Ollama プラグイン
さらに、Swift で書かれた macOS ネイティブアプリOllamacや、Notion AI に似たObsidian Ollamaなどの興味深いアプリもあり、必要に応じて選択できます。
上級者向けの遊び方#
モデルの変更#
前述の「空はなぜ青いのですか?」の回答を注意深く読んだ場合、何か違和感を感じたかもしれません —— おめでとうございます、あなたは大規模言語モデルの「幻覚」を成功裏に捉えました。実際、パラメータ数が少なく、量子化による損失があるため、ローカルで実行するのに適したモデルは幻覚を起こしやすく、ひどい場合は前後の文脈が合わなくなることさえあります。これに対する唯一の緩和策は、条件が許す限り、より多くのパラメータを持つモデルをできるだけ実行することです。
例えば、最初に使用したのは Llama2-Chinese モデルの 7B パラメータの 4 ビット量子化版です。16GB のメモリがあれば、13B パラメータ版を実行することを検討できます。
どう操作するかというと、Ollama は Docker のイメージを組織するのと似た方法を採用しており、モデル名にタグを付ける形式(model:tag
)で具体的なモデルバージョンを指定します。タグを付けない場合はデフォルトでlatest
となり、通常は 7B パラメータの 4 ビット量子化版に対応します。13B 版を実行したい場合は、13b
タグを使用できます:
% ollama run llama2-chinese:13b "空はなぜ青いのですか?"
空は大気と太陽光の散乱によって青くなります。
日の出前に見える空は紫色や虹色で、これは太陽光が海面から反射される際に、大気中の二酸化炭素や水分子によって青色、紫色、または虹色に散乱されるからです。
日の出後、空は灰色になります。これは太陽光が大気中で遮られ、空に青色を加えるための十分な反射がなくなるためです。
空を見るとき、その色は太陽光と大気中の物質との相互作用によって形成されます。これらの物質には水、二酸化炭素、その他の気体、微細な氷片や砂塵が含まれています。
夜になると空は徐々に深い青色に変わります。これは太陽光が大気中を伝播し、大気層の構造によるものです。
見ての通り、確かに効果が良くなっています。他の選択可能なタグも、対応するモデルのタグページで確認できます。
また、他のモデルに変更することもできます。ここでは、公式モデルライブラリで中国語のサポートが比較的良好または興味深いものをいくつか推薦します:
- DeepSeek シリーズ、深度求索チームが提供し、コード訓練用のDeepSeek-Coderや汎用のDespSeek-LLMが含まれています;
- Yi シリーズ、零一万物チームが提供し、20 万のコンテキストウィンドウをサポートするバージョンが選択可能です;
- 財力に余裕があれば、フランスのスタートアップチーム Mistral が最新に発表した初のオープンソース混合専門家 MoE モデルMixtral-8x7Bを試してみてください。48GB のメモリが必要です;
- ハードウェアが厳しい場合でも、Phi-2はマイクロソフトチームが論理と理解を精調したもので、2.7B のサイズで 4GB のメモリで実行でき、発話速度が非常に速いですが、中国語はあまり理解できません。
画像サポート#
純粋な言語大規模モデルに加えて、Ollama は0.1.15 バージョンから視覚モデルのサポートも提供しています。ローカル画像のパスをプロンプトに書くだけで利用できます(macOS ユーザーは画像をターミナルにドラッグしてそのパスを取得できます):
% ollama run llava
>>> この画像のテキストは何と言っていますか? /Users/mchiang/Downloads/image.png
画像 '/Users/mchiang/Downloads/image.png' が追加されました。
この画像のテキストは「The Ollamas」です。
LLaVA の例、画像出典は Ollama のリリースノート
カスタムシステムプロンプト#
ChatGPT の使用経験に基づき、多くの人がシステムプロンプトの重要性を認識しています。良いシステムプロンプトは、大規模モデルを自分の必要な状態に効果的にカスタマイズできます。Ollama では、システムプロンプトをカスタマイズするためのさまざまな方法があります。
まず、多くの Ollama フロントエンドはシステムプロンプトの設定入口を提供しており、その機能を直接利用することをお勧めします。さらに、これらのフロントエンドは、通常APIを介して Ollama サーバーと対話しているため、直接呼び出してシステムプロンプトオプションを渡すこともできます:
curl http://localhost:11434/api/chat -d '{
"model": "llama2-chinese:13b",
"messages": [
{
"role": "system",
"content": "海賊の口調で簡単に答えてください。"
},
{
"role": "user",
"content": "空はなぜ青いのですか?"
}
],
"stream": false
}'
ここで、role
がsystem
のメッセージがシステムプロンプトになります。
さらなるオプション#
Ollama の ModelFile は、ユーザーにより多くのカスタマイズの余地を提供します。システムプロンプトのほか、対話テンプレート、モデル推論温度、コンテキストウィンドウの長さなどのパラメータも自由に設定でき、上級者向けの使用に適しています。
作成前に、show --modelfile
コマンドを使って既存モデルの ModelFile 内容を確認できます。参考として:
% ollama show --modelfile llama2-chinese:13b
# Modelfile generated by "ollama show"
# このファイルに基づいて新しいModelfileを構築するには、FROM行を次のように置き換えます:
# FROM llama2-chinese:13b
FROM ~/.ollama/models/blobs/sha256:8359bebea988186aa6a947d55d67941fede5044d02e0ab2078f5cc0dcf357831
TEMPLATE """{{ .System }}
Name: {{ .Prompt }}
Assistant:
"""
PARAMETER stop "Name:"
PARAMETER stop "Assistant:"
カスタムシステムプロンプトを設定し、推論温度パラメータを変更する例として、次のような形式の ModelFile を構築する必要があります:
FROM llama2-chinese:13b
SYSTEM "海賊の口調で答えてください。"
PARAMETER temperature 0.1
その後、create
コマンドを使用して作成し、新しいモデルは元のモデルの重みファイルと未調整のオプションパラメータを引き継ぎます:
ollama create llama2-chinese-pirate -f ~/path/to/ModelFile
これにより、自分だけのローカルモデルが得られます。
結論#
一般的なアプリケーションソフトウェアと比較すると、Ollama の使用体験はまだ「優雅」とは言えないかもしれません。しかし、数ヶ月前の状態と比較すると、その進歩はまるで刀耕火種から現代社会に移行したかのようです:当時は本当にお金をかけてカードを積み上げ、環境を構成して調整する必要がありましたが、今ではモデルが発表されてから 1 週間も経たないうちに(Phi-2 は先週発表されました)、ノートパソコンでスムーズに動作することができます。この観点から、Ollama が AI 技術の一般化に貢献していると言っても過言ではありません。