OllamaでGemma 7Bを試す

OllamaでGemmaが使えるようになったようなので、早速試してみる。

まず、Ollamaを試すのような感じで、Dockerで以下のような感じで立ち上げておく。

$ docker run --gpus=all -v ./ollama:/root/.ollama -p 11434:11434 --name ollama -d ollama/ollama

RTX 4060Ti 16Gを利用しているので、–gpus=allでGPUを使える状態にしている。GPUがなければ、このオプションは不要です。

次は、Gemma 7Bをpullしてみる。

$ docker exec -it ollama ollama pull gemma:7b

ollama listでみると、5.2Gという感じだが、GPUのメモリーにも乗りそう。

$ docker exec -it ollama ollama list
NAME                                 	ID          	SIZE  	MODIFIED
gemma:7b                             	430ed3535049	5.2 GB	2 days ago

あとは、ollama runして、実行してみる。

$ docker exec -it ollama ollama run gemma:7b                                                
>>> 全文検索サーバーFessとは何ですか?
Fessは、全文検索サーバーと呼ばれるソフトウェアです。これは、テキストやドキュメントなどのデータを検索するためのサーバーを提供します。

**Fessの概要:**

* **オープンソース:** Fessはオープンソースソフトウェアであり、無料で使用できます。
* **パフォーマンス:** Fessは非常に高速な検索機能を備えており、膨大な量のデータにも対応できます。
* **スケーラビリティ:** Fessはスケーラブルな設計であり、多くのユーザーやサーバーに対しても利用できます。
* **柔軟性:** Fessは柔軟な設計に基づいて、さまざまな検索機能を簡単に追加できます。
* **セキュリティ:** Fessはセキュリティ機能を備えており、ユーザーのデータを保護します。

**主な機能:**

* **全文検索:** Fessはテキスト、ドキュメントなどのデータを検索するための強力な機能を提供します。
* **データ管理:** Fessはデータを管理するための機能も備えており、検索以外にもデータの追加、削除、更新などができます。
* **統合:** Fessはさまざまなシステムと統合し、さまざまな検索機能を提供します。
* **アクセス:** Fessはいくつかのアクセス方法を提供し、ユーザーが簡単にアクセスできます。

**用途:**

Fessは、以下の用途に最適です。

* 文本検索システム
* ドキュメント管理システム
* データ分析システム
* ソフトウェアのサポートシステム
* 検索エンジン

**結論:**

Fessは、高速な検索機能、スケーラビリティ、柔軟性など、多くの特徴を持つオープンソースの全文検索サーバーです。さまざまな用途に最適な機能を備えており、多くの組織が使用しています。

日本語で7Bなので、これくらいできれば良いのかなとも思いつつ…。GPUを使えているので、レスポンスの応答速度はかなり良さそう。

nvcc fatal : Value ‘native’ is not defined for option ‘gpu-architecture’

llama.cppをmake LLAMA_CUBLAS=1でビルドすると、このエラーが起きた…。-arch=nativeだと、GPUを検知してビルドしてくれるらしいのだけど、RTX 4060の手元の環境だとエラーになる。CUDAのバージョンも影響している感じもするけど、とりあえず、Makefileを

-       MK_NVCCFLAGS += -arch=native
+       MK_NVCCFLAGS += -arch=all-major

という感じに修正して対応した。

Ollamaを試す

以前にllama.cppを試して便利だなーとか思って、ちょっと時間が経ったら、langchainでOllamaというのを使っていたので、試してみたら、結構便利だった。

いろいろなLLMをAPIなどでも実行できるようにしてくれる。起動も簡単。Dockerも提供されているので、それを利用することにする。モデルを保存するディレクトリとして、ollamaディレクトリを事前に作っておくとして、起動自体は以下でできる。

docker run -d -v ./ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama

GPUを利用する場合は、–gpus=allも-dの次あたりに追加して実行すればOK。

たとえば、llama2を利用したい場合は、まず、モデルをダウンロードしておく。

docker exec -it ollama ollama pull llama2

利用可能なモデルはここに使用メモリサイズなどの情報とかと一緒に書いてある。

コマンド実行で試して見るなら、以下を実行すると試すことができる。

$ docker exec -it ollama ollama run llama2
>>> Why is the sky blue?

The sky appears blue because of a phenomenon called Rayleigh scattering, which occurs when sunlight passes through the Earth's atmosphere. The atmosphere contains tiny molecules of gases such as nitrogen 
and oxygen, which scatters the light in all directions.
...

後は、APIでのアクセスも提供されているが、ここに一通り書いてある。以下のようにアクセスすると結果が取得できる。

$ curl http://localhost:11434/api/generate -d '{
  "model": "llama2",
  "stream": false,
  "prompt": "Why is the sky blue?"
}'

EmbeddingのAPIもあるので、いろいろなことができそうではある。

あとは、Modelfileなどを作成すると、カスタマイズしたモデルを登録できるようなので、カスタマイズが必要になったら使えそうです。

という感じで、手軽にローカルでLLMを試すことができる感じになってきました。