Ollama（ローカルLLM）について調べたこと

## Ollama
Ollamaは、ローカル環境でLLMを使うことができるツールです。Linux, Mac, Windowsなどの様々なプラットフォームで手軽にLLMを動かすことができます。量子化と呼ばれるモデルを軽量化するテクニックを使うと、オープンソースのLLMを省スペックのPCで動かすことが可能です。

## Ollamaで扱える代表的なテキスト生成モデル
* [gemma](https://ollama.com/library/gemma)
    * Google社が公開している、Geminiをもとに設計されたLLM
* [llama3](https://ollama.com/library/llama3)
    * Meta社が公開している、小型かつ高性能なLLM
* [phi3](https://ollama.com/library/phi3)
    * Microsoft社による大規模言語モデル(LLM)ならぬ小規模言語モデル(SLM)
* [Command R+](https://ollama.com/library/command-r-plus) 
    * カナダのAIスタートアップ、Cohere社による、RAGとToolの使用などの長いコンテキスト処理に最適化したモデル
* [mistral](https://ollama.com/library/mistral)
    * フランスのAIスタートアップ、Mistral AI社による、パフォーマンスと使いやすさを追求したモデル
* [mixtral](https://ollama.com/library/mixtral)
    * 同じくMistral AI社による混合エキスパートモデル

## ローカルLLMのメリット
RAGを自社で試してみたいという人に、以下の点に課題があると言われていた。

*  **セキュリティ** 
*  **コスト** 
* **システム構築**

 **セキュリティ** に関しては、データの機密性が高い会社は、ナレッジを外部に置いたり、LLMを使う際に外部にデータを送付する点がネックになるようです。

 **コスト** に関してもトータルでどれだけのコストになるか、見積もるのが難しかったり、RAGを実現するためのシステム構築にもハードルの高さを感じている人も多いようです。

上記の課題を解決するための方法として、ローカルで安価なLLMを使ってノーコードでRAGを構築できれば良さそうです。

## ローカルLLMのデメリット・課題
会社のパソコンで動作検証を行ったところ、下記の通り問題なく動作はしたものの
回答を生成するのに10分くらいかかった。  **最大のデメリットはマシンのスペックにかなり依存するという点 。** 

```
PS C:\Users\info> ollama --version
ollama version is 0.3.10
PS C:\Users\info> ollama run llama3
pulling manifest
pulling 6a0746a1ec1a... 100% ▕████████████████████████████████████████████████████████▏ 4.7 GB
pulling 4fa551d4f938... 100% ▕████████████████████████████████████████████████████████▏  12 KB
pulling 8ab4849b038c... 100% ▕████████████████████████████████████████████████████████▏  254 B
pulling 577073ffcc6c... 100% ▕████████████████████████████████████████████████████████▏  110 B
pulling 3f8eb4da87fa... 100% ▕████████████████████████████████████████████████████████▏  485 B
verifying sha256 digest
writing manifest
success
>>> ollamaはオープンソースの大規模言語モデル（LLM）をローカルで実行できるOSSツールですが、なぜGPUを積んでいないローカルP
... Cでも動作するのでしょうか？
🤔

Olenna (ollama) is an open-source tool that allows you to run large language models (LLMs) locally on your
machine. One of the impressive features of Olenna is its ability to run on a local PC without a dedicated GPU,
which is unusual for LLMs that typically require significant computational power and memory.

So, why can Olenna run on a non-GPU-equipped PC? Here are some key factors:

1. **CPU-based acceleration**: Olenna uses the CPU's processing power to accelerate its computations. While GPUs
are optimized for parallel processing, CPUs have also become more efficient in recent years. Olenna's architecture
takes advantage of this by utilizing multiple CPU cores for computation.
2. **Optimized algorithms and data structures**: Olenna's developers have implemented optimized algorithms and
data structures that minimize the need for GPU acceleration. This allows the model to run efficiently on CPU-only
hardware.
3. **Low-level optimizations**: The Olenna team has fine-tuned various low-level components, such as memory
management, thread scheduling, and instruction selection, to optimize performance on CPU-only hardware.
4. **Model pruning and quantization**: To further reduce computational requirements, Olenna uses model pruning
(removing redundant neurons) and quantization (reducing precision from 32-bit floats to lower-precision integers).
These techniques help reduce the model's size and computational complexity.
5. **Distributed computing**: When processing large models or datasets, Olenna can distribute the workload across
multiple CPU cores or even nodes, leveraging the power of parallel computing.

By combining these optimizations, Olenna is able to efficiently run LLMs on a local PC without a dedicated GPU,
making it more accessible and user-friendly for researchers, developers, and enthusiasts. 💻
```

やはりGPUを搭載していないと、回答を生成するまでに時間がかかるので、仕事で使うのは厳しそう。

## CPUだと頼りないので、GPUインスタンスを検討する

[こちらの記事](https://qiita.com/jin0g/items/88b0c82063b770c4a2b5)で国内外の主要なクラウドとスパコンのインスタンスの、1GPUの1時間あたりの料金を比較してくれています。

最もハイスペックなH100のGPUで１時間あたりのコストが最も安いのは[東工大 TSUBAME 4.0](https://www.t4.gsic.titech.ac.jp/) ですが、
サーバロードバランシングが提供されていないっぽいので、[Scaleway](https://www.scaleway.com/en/)か[さくらのクラウド(月額利用)](https://cloud.sakura.ad.jp/products/server/gpu/)、[Azure](https://azure.microsoft.com/ja-jp)あたりが選択肢になりそう。
しかし、Scalewayは英語のドキュメントしかなく、ネットで検索しても情報があまりないことから実装のハードルが高い。さくらのクラウド(月額利用)は月額利用のプランしか用意されていないため、コストが割高になってしまう感が否めない。

ちなみに、さくらのクラウド(月額利用)で[GPUサーバーを２台利用した場合のコストをざっくり見積もったところ](https://cloud.sakura.ad.jp/payment/simulation/#/?state=e3N6OiJpczFhIixzdDp7InVuaXQiOiJtb250aGx5IiwidmFsdWUiOjF9LHNpOiIiLGl0OntzZTpbe3A6MTA0LHE6MixkaTpbe3A6MSxxOjJ9XSwib3MiOm51bGwsbGE6bnVsbCx3YTpudWxsLGlwaG86ZmFsc2V9XX19)、463,760円 (税込) でした。

## まとめ
ローカルLLMは一般的にコストが安いとされているものの、パブリッククラウドのGPUインスタンスを利用する場合は
マシンのスペック（チップの性能）がコストが大きく左右するので注意が必要。
ローカルLLMを採用するかどうかについては、以下の点について考慮のうえ、冷静に判断したいところです。

* オンプレミスなのか、パブリッククラウドなのか？
* OpenAIのようなLLMプロバイダーが提供する有料モデルを使った場合に想定されるコストと比較してみる

<br><br>
### 引用元記事 
[Ollama](https://ollama.com/)
[Tanuki-8BとOllamaとDifyを使って日本語ローカルRAG構築](https://zenn.dev/mkj/articles/93dbd6c9d94c58)
[ollamaによるローカルLLMで、テキスト生成、マルチモーダル推論、Embeddingを試してみた](https://qiita.com/misu007/items/4d629957a2099abe875b)
[GPUインスタンスの料金比較(2024)](https://qiita.com/jin0g/items/88b0c82063b770c4a2b5)