M1macBookAir 16GBで Ollama を使って日本語に特化した大規模言語モデル Llama-3-ELYZA-JP-8B を動かす

M1macBookAir 16GBで
Ollama を使って日本語に特化した大規模言語モデル Llama-3-ELYZA-JP-8B を動かす

実行環境
M1 MacbookAir 16GB

「よーしパパ、Ollama で Llama-3-ELYZA-JP-8B 動かしちゃうぞー」
を参考に実践

ただし
* Model: MacBook Pro 14-inch, Nov 2023
* Chip: Apple M3
* Memory: 24 GB
* OS: macOS 14.4.1
で動作確認なので

私の環境が動くかは微妙なところ

モデルファイルを
ダウンロードしようとしたが
https://huggingface.co/elyza/Llama-3-ELYZA-JP-8B-GGUF/blob/main/Llama-3-ELYZA-JP-8B-q4_k_m.gguf

This file is stored with Git LFS . It is too big to display, but you can still download it.
となっている

どうすればダウンロードできるか?
日本語で解説

とchatgpt40で調べた

brew install git-lfs

とするが

==> Downloading https://formulae.brew.sh/api/formula.jws.json
######################################################################### 100.0%
==> Downloading https://formulae.brew.sh/api/cask.jws.json
######################################################################### 100.0%
git-lfs 3.0.2 is already installed but outdated (so it will be upgraded).
Error: Cannot install under Rosetta 2 in ARM default prefix (/opt/homebrew)!
To rerun under ARM use:
    arch -arm64 brew install ...
To install under x86_64, install Homebrew into /usr/local.

となる

arch -arm64 brew install git-lfs

で再度実行

git-lfs 3.0.2 is already installed but outdated (so it will be upgraded).
==> Downloading https://ghcr.io/v2/homebrew/core/git-lfs/manifests/3.5.1
######################################################################### 100.0%
==> Fetching git-lfs
==> Downloading https://ghcr.io/v2/homebrew/core/git-lfs/blobs/sha256:6079593e9b
######################################################################### 100.0%
==> Upgrading git-lfs
  3.0.2 -> 3.5.1 
==> Pouring git-lfs--3.5.1.arm64_sonoma.bottle.tar.gz
==> Caveats
Update your git config to finish installation:

  # Update global git config
  $ git lfs install

  # Update system git config
  $ git lfs install --system
==> Summary
🍺  /opt/homebrew/Cellar/git-lfs/3.5.1: 79 files, 12.6MB
==> Running `brew cleanup git-lfs`...
Disable this behaviour by setting HOMEBREW_NO_INSTALL_CLEANUP.
Hide these hints with HOMEBREW_NO_ENV_HINTS (see `man brew`).
Removing: /opt/homebrew/Cellar/git-lfs/3.0.2... (65 files, 11.3MB)

グローバルGit設定を更新するので

git lfs install

git clone https://huggingface.co/elyza/Llama-3-ELYZA-JP-8B-GGUF.git

でダウンロード

Ollama では標準サポートされていないため、
モデルに関連する必要な情報を記載したファイルを作成し、そのファイルからモデルを作る

https://github.com/ollama/ollama/blob/main/docs/modelfile.md
の例では

FROM llama3
# sets the temperature to 1 [higher is more creative, lower is more coherent]
PARAMETER temperature 1
# sets the context window size to 4096, this controls how many tokens the LLM can use as context to generate the next token
PARAMETER num_ctx 4096

# sets a custom system message to specify the behavior of the chat assistant
SYSTEM You are Mario from super mario bros, acting as an assistant.

Chatgpt によれば
拡張子は不要で
Modelfileの内容はYAML形式で記述
Modelfileの主要なフィールド
* name: モデルの名前
* version: モデルのバージョン
* description: モデルの簡単な説明
* license: モデルのライセンス情報(オープンソースかどうか)
* architecture: モデルのアーキテクチャ(例: llama, gpt)
* weights: モデルの重みファイルのパスとフォーマット
* tokenizer: トークナイザーの種類と必要なファイルのパス
* config: モデルの設定(バッチサイズや最大トークン数など)
* assets: モデルに関連するスクリプトや追加のリソース(オプション)
って解説が出たけど

name: Llama-3-ELYZA-JP-8B
version: 1.0.0
description: A Japanese language model based on Llama architecture.
license: open

architecture: llama
weights:
  - path: ./path/to/model/weights.bin
    format: pytorch

tokenizer:
  type: bpe
  vocab_file: ./path/to/vocab.json
  merges_file: ./path/to/merges.txt

config:
  max_tokens: 1024
  batch_size: 8

# Optional: custom Python scripts or other assets
assets:
  - path: ./path/to/custom/script.py
    type: script

というように全然違う記述になっている

とりあえず
https://qiita.com/s3kzk/items/3cebb8d306fb46cabe9f
を参考に
Modelfile を作成する

vim Modelfile

でファイルを作成

中身を

FROM ./Llama-3-ELYZA-JP-8B-q4_k_m.gguf
TEMPLATE """{{ if .System }}<|start_header_id|>system<|end_header_id|>

{{ .System }}<|eot_id|>{{ end }}{{ if .Prompt }}<|start_header_id|>user<|end_header_id|>

{{ .Prompt }}<|eot_id|>{{ end }}<|start_header_id|>assistant<|end_header_id|>

{{ .Response }}<|eot_id|>"""
PARAMETER stop "<|start_header_id|>"
PARAMETER stop "<|end_header_id|>"
PARAMETER stop "<|eot_id|>"
PARAMETER stop "<|reserved_special_token"

として保存

ollama create elyza:jp8b -f Modelfile

を実行しようとしたけど
ディスクがいっぱいでエラー

Error: write /Users/snowpool/.ollama/models/blobs/sha256-722055746: no space left on device

外付けSSDを使いデータを移動しておく

ls /Volumes

が外付けSSDのマウントされるので

df -h /Volumes/KINGSTON    
Filesystem      Size    Used   Avail Capacity iused ifree %iused  Mounted on
/dev/disk9s1   954Gi   752Gi   202Gi    79%       1     0  100%   /Volumes/KINGSTON

で内容量を確認

不要と思われるファイルを外付けSSDに移動

 ollama create elyza:jp8b -f Modelfile

を実行し

transferring model data 100% 
using existing layer sha256:91553c45080b11d95be21bb67961c9a5d2ed7556275423efaaad6df54ba9beae 
using existing layer sha256:8ab4849b038cf0abc5b1c9b8ee1443dca6b93a045c2272180d985126eb40bf6f 
creating new layer sha256:c0aac7c7f00d8a81a8ef397cd78664957fbe0e09f87b08bc7afa8d627a8da87f 
creating new layer sha256:bc526ae2132e2fc5e7ab4eef535720ce895c7a47429782231a33f62b0fa4401f 
writing manifest 
success 

となったので

ollama run elyza:jp8b

で実行

>>> 今日の静岡の最高気温は?
残念ながら、I'm a large language model, I don't have有するデータベースにリア
ルタイムな天候情報は持っていません。ですから、今日の静岡の最高気温についてお
答えすることができません。

最新の天候情報を知りたい場合は、以下の方法で入手してください。

1. 気象庁のウェブサイト: 気象庁のホームページには、全国各地の天気予報や観測
結果が掲載されています。
2. 静岡県の公式ウェブサイト: 静岡県の公式ウェブサイトにも、静岡県内の天気予
報や観測結果が掲載されている場合があります。
3. 天気アプリやニュースサイト: 多くの天気アプリやニュースサイトでは、最新の
天候情報を提供しています。

>>> 不労所得を得るにはどうすればいい?
不労所得とは、労働をしなくても入ってくる収入のことです。代表的な不労所得の例
は以下の通りです。

1. 配当金や株主優待: 株式投資で得られる配当金や株主優待など。
2. Rental Income(不動産所得): 不動産投資をして家賃収入や賃料収入を得る。
3. Dividend-paying Stocks(分配型債券): 高配当の債券やハイイールド債で、定期
的な利息が受け取れる。

不労所得を得るためには、以下の方法があります。

1. 資産運用:
   - 株式投資や債券投資、REIT(不動産投資信託)、FXなど。
   - 信託銀行や証券会社に資金を預け、運用してもらう。
2. 副業やスキル活用:
   - スキルや知識を生かして、オンラインで教える講師や、作家・作曲家としての
活動など。
3. 不動産投資:
    - アパートやマンションの所有権を取得し、家賃収入を得る。
4. 預貯金や定期預金:
   - 高利回りの銀行口座に預け入れる。

不労所得は、通常、以下のような特徴があります。

1. 複雑な計算や帳簿が必要ない。
2. 労働の時間と直接関係しない収入。
3. 通常、資産形成のために運用することになる。

不労所得を始めるためには、以下の点に注意してください。

1. 資金やリスク管理を厳しく行う必要がある。
2. 運用成績や利回りが期待通りにいかない場合もある。
3. 税制や法律の改正に適切に対応することが大切です。


>>> /bye

と実行したが
思ったよりも軽快に動作する

なおリアルタイムの情報などを得ることはそのままではできなかった

次は
Enchantedを使い webUIを試す