Llama3.2をローカル環境(macOS)でサクッと動かしてみる

# Llama 3.2をローカル環境で動かしてみた

## はじめに
先日Meta社より発表があったLlama 3.2を動かしてみました。Llama 3.2は前バージョンから大幅に改善され、特に小規模モデルの性能向上が注目されています。主な改善点として、文脈理解の向上、多言語サポートの強化、そして推論速度の改善が挙げられます。
この記事では、Llama 3.2の3Bモデル（3 Billion パラメータ）をローカル環境で簡単に実行する方法を紹介します。

アップデートの詳細については以下の記事にまとめていますのでご確認ください。

https://qiita.com/shirochan/items/0a588099b096ac312320

https://qiita.com/shirochan/items/ee9c66979ceca0b30528


## 前提条件

### 使用するツール
今回はollamaを使用します。
https://ollama.com/

dockerの環境が事前に準備済みであること、dockerコマンドが利用できることが前提です。

### 実行環境
| 項目 | 仕様 |
|------|------|
| マシン | MacBook Air |
| CPU | Apple M2 |
| メモリ | 16GB |
| OS | Sonoma 14.7 |

## 実践

### ollamaの準備
ollamaは、ローカル環境で様々な大規模言語モデル（LLM）を簡単に実行できるオープンソースのツールです。今回は、Docker上でollamaを準備し、Llama 3.2を実行します。

#### Docker環境の確認
まず、以下のコマンドでDocker環境が正しく設定されていることを確認します：

```zsh
docker --version
```

#### ollamaコンテナの起動
次に、ollamaのDockerコンテナを起動します：

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

このコマンドの各部分の説明：
- `-d`: バックグラウンドで実行
- `-v ollama:/root/.ollama`: データの永続化
- `-p 11434:11434`: ポートマッピング
- `--name ollama`: コンテナ名の指定

GPU(NVIDIA/AMDなど)を使用する場合は、[ollamaのDocker Hub](https://hub.docker.com/r/ollama/ollama)を参考に適切なコマンドを実行してください。

### モデルの実行と情報確認
dockerの環境が用意できたらLlama 3.2を実行し、モデル情報を確認します：

```zsh
docker exec -it ollama ollama run llama3.2
```

デフォルトでは3Bが起動します。
1Bのモデルを起動させたい場合は:

```zsh
docker exec -it ollama ollama run llama3.2:1b
```
としてコマンドを実行してください。

https://ollama.com/blog/llama3.2

モデルが起動したら、以下のコマンドでモデル情報を確認できます：

```
>>> /show info
  Model
    architecture        llama
    parameters          3.2B
    context length      131072
    embedding length    3072
    quantization        Q4_K_M

  Parameters
    stop    "
"
    stop    "
"
    stop    "
"

  License
    LLAMA 3.2 COMMUNITY LICENSE AGREEMENT
    Llama 3.2 Version Release Date: September 25, 2024
```

この情報から、使用しているモデルが3.2Bパラメータを持つLlama 3.2であることが確認できます。

### 英語での動作確認
まずは英語で質問を投げてみます。

```
>>> what can you do ?
I'm an AI assistant, so I can help with a wide range of tasks and answer questions on various topics. Here are some examples:

1. **Answering questions**: I can provide information on history, science, technology, literature, arts, culture, health, and more.
2. **Language translation**: I can translate text from one language to another, including popular languages such as Spanish, French, German, Chinese, and many others.
3. **Writing assistance**: I can help with writing tasks, such as suggesting alternative phrases, providing grammar and spell check, and even generating text on a given topic.
4. **Conversation**: I can have a conversation with you, answering your questions and engaging in discussions on various topics.
5. **Jokes and humor**: I can share jokes, puns, and other forms of humor to brighten up your day!
6. **Trivia and games**: I can play simple games like Hangman or 20 Questions, and provide trivia answers on a wide range of topics.

What sounds interesting to you?
```

### 日本語での動作確認
次に日本語で質問してみます。

```
>>> あなたは何ができますか？
私は、以下のようなことができます。

1. **質問に答えます**: 歴史、科学、技術、文学、芸術、文化、健康などの幅広いトピックについて、答えを提供します。
2. **言語翻訳**: さまざまな言語からテキストを翻訳してくれます。日本語からの英語への翻訳も可能です。
3. **文書助け**: テキストに Suggestions を提供して、格調が高く美しく見えるようにします。また、グレーメリットチェックや、文章の整理もできます。
4. **会話**: 会話に参加し、質問を回答して、議論しましょう。
5. **笑いとユーモア**:笑いを誘って、ピューブリティーな質問を答えます。
6. **トランジットゲーム**: 20 questionsやHangmanなど、単純なゲームをプレイすることができます。

どんな機能が有用でしょうか？
```

問題なく動作していることが確認できます。

## まとめ
軽量版がリリースされたLlama 3.2をローカル環境で実行してみました。ollamaにはLlama 3.2の1B/3Bモデルが既に登録されており、非常に簡単に試すことができました。

より大規模なモデル（11B/90B）を試したい場合は、Hugging Faceなどを利用するとよいでしょう。ただし、これらのモデルはより多くのリソース（メモリ、計算能力）を必要とするため、使用する際はご注意ください。

- [Llama 3.2 (11B)](https://huggingface.co/meta-llama/Llama-3.2-11B-Vision)
- [Llama 3.2 (90B)](https://huggingface.co/meta-llama/Llama-3.2-90B-Vision-Instruct)

また、[Open WebUI](https://github.com/open-webui/open-webui)を利用すれば、Web UI上でのLlama 3.2の操作も可能です。これにより、より直感的なインターフェースでモデルを操作できます。

もしよければいいねボタンをポチッとお願いします。
記事を書くモチベーションになります。

# 関連書籍
- [大規模言語モデル入門](https://amzn.to/3YnR3Fn)