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を試す

コマンドを使ったファイルのバックアップ

ファイルのバックアップ

実行環境
M1 MacbookAir 16GB

使用したバックアップストレージは

キングストン 外付け SSD 1000GB 1TB USB3.2 Gen2x2 読出最大2000MB/秒 防滴防塵 耐衝撃 ポータブル SXS2000/1000G 5年保証 1000GB (1TB)

なお 昔のマシンの場合USB-Cが使えないので変換アダプタが必要
ubuntu22.04 のバックアップには

両面10Gbps】GRAUGEAR USB-C to USB-A変換アダプタ USB 3.2 Gen 2 USB C 変換アダプター メス Type-Cメス to USB 3.0 オス 10Gbps超高速データ転送 3A高速充電 在宅勤務 [G-AD-CTA-10G]
を使用

ついでなので
ワンライナーでファイルを移動できるようにする

mv ~/Downloads/*.{jpg,jpeg,png,gif,bmp,tiff} . 

を実行したら

zsh: no matches found: /Users/snowpool/Downloads/*.jpeg

となった

zshでは、ワイルドカードパターン(*など)に一致するファイルがない場合、エラーが発生する

find ~/Downloads/ -type f \( -iname "*.jpg" -o -iname "*.jpeg" -o -iname "*.png" -o -iname "*.gif" -o -iname "*.bmp" -o -iname "*.tiff" \) -exec mv {} . \;

というように
findコマンドを使うことで、ファイルが存在する場合のみ移動を実行

 mv ~/Downloads/*.pdf .
mv: ./r3syotoku-2.pdf: set flags (was: 00000100): Invalid argument

となった

どうやら開いているファイルがあったらしい
再度閉じてから実行したら問題なくできた

CygamesJeanneV6.safetensors

この拡張子は

Stable diffusionのモデルファイル
を参考に

m1macbookAir へ ollamaを入れる

m1macbookAir へ ollamaを入れる

実行環境
M1 MacbookAir 16GB

M1MacでOllamaを試したら爆速で驚いた
を参考に実行する

インストール関連は

OllamaでLLM(Llama 3等)をローカルMacで動かす with WebUI
がわかりやすい

https://ollama.com
へアクセスすると
Download
があるのでこれをクリック

OSを判定しているので
そのまま
Download for macOS
をクリック

ファイルをダウンロードできるので
ダブルクリックで解凍

あとは

 ollama run llama3

を実行

初回のみモデルダンロードで時間がかかる
容量が4.7GBとかなり大きいので時間がある時に行わないと無理

終了する時には

 /bye

とすればOK

これでも使えるけど
https://github.com/open-webui/open-webui
にある
Open WebUI (Formerly Ollama WebUI)
を使えばブラウザから簡単に使えるようになる

Installation with Default Configuration

* If Ollama is on your computer, use this command:
docker run -d -p 3000:8080 --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:main


* If Ollama is on a Different Server, use this command:
To connect to Ollama on another server, change the OLLAMA_BASE_URL to the server's URL:
docker run -d -p 3000:8080 -e OLLAMA_BASE_URL=https://example.com -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:main


    * To run Open WebUI with Nvidia GPU support, use this command:
* docker run -d -p 3000:8080 --gpus all --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:cuda


Installation for OpenAI API Usage Only

* If you're only using OpenAI API, use this command:
docker run -d -p 3000:8080 -e OPENAI_API_KEY=your_secret_key -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:main


Installing Open WebUI with Bundled Ollama Support

This installation method uses a single container image that bundles Open WebUI with Ollama, allowing for a streamlined setup via a single command. Choose the appropriate command based on your hardware setup:
* With GPU Support: Utilize GPU resources by running the following command:
docker run -d -p 3000:8080 --gpus=all -v ollama:/root/.ollama -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:ollama


* For CPU Only: If you're not using a GPU, use this command instead:
docker run -d -p 3000:8080 -v ollama:/root/.ollama -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:ollama


Both commands facilitate a built-in, hassle-free installation of both Open WebUI and Ollama, ensuring that you can get everything up and running swiftly.
After installation, you can access Open WebUI at http://localhost:3000. Enjoy! 😄
Other Installation Methods

We offer various installation alternatives, including non-Docker native installation methods, Docker Compose, Kustomize, and Helm. Visit our Open WebUI Documentation or join our Discord community for comprehensive guidance.

をみると
Docker で動かす前提になっている

別の方法を調べたら
Enchantedを使えば Mac の場合代用できるらしい

Mac用 Enchanted アプリで文章を自由自在に活用してみる
を参考に

「Enchanted」 を使って iPhone から Ollama にアクセスしてみる
によれば
iPhone からでも使えるらしい

私の環境は Android なので使えないけど…

https://github.com/AugustDev/enchanted
でコードが公開されている

とりあえず先に日本語モデルを入れるのが先