AI 技術の進歩に伴い、大規模言語モデル (LLM) が私たちの生活に深く浸透しています。商用 LLM はコストやデータセキュリティの問題で利用が制限されますが、オープンソースの LLM は自由に使用できるため、ユーザーの信頼を得ています。
Ollama は大規模モデルのデプロイを容易にするツールです。Docker に似た使い勝手で、OpenAI API と互換性があるため、さまざまなモデル間の違いを気にせず利用可能です。
大規模なモデルを使用する際、ファイルサイズが問題となります。例えば、Llama 3.1 70B モデルは 40GB にも達します。このような大容量ファイルを管理する方法として、次の 2 つのアプローチが考えられます。
- モデルのパッケージ化:Docker イメージや OS サンプルにモデルを含め、IaaS/PaaS を通じて管理します。
- 共有ストレージ:JuiceFS などの共有ファイルシステムにモデルを格納し、必要に応じてダウンロードします。
JuiceFS はデータプリヒートと分散キャッシュ機能を備えた共有ストレージです。この機能により、モデルファイルのロード速度を大幅に向上させることができます。
モデルのダウンロード
この記事では、Linux 環境でのモデルダウンロードを例に説明します。
JuiceFS ファイルシステムの準備
Ollama はデフォルトでモデルデータを `/root/.ollama` に保存します。これを JuiceFS にマウントします。
$ juicefs mount example /root/.ollama --subdir=ollama
モデルのダウンロードとインストール
Ollama をインストールします。
$ curl -fsSL https://ollama.com/install.sh | sh
以下、llama3.1 8B モデルを例としてダウンロードします。
$ ollama pull llama3.1
モデルに独自のプロンプトを追加するための Modelfile を作成します。
$ cat <<EOF > Modelfile
> FROM llama3.1
PARAMETER temperature 1
SYSTEM """
You are a literary writer named Rora. Please help me polish my writing.
"""
> EOF
新しいモデルを生成します。
$ ollama create writer -f ./Modelfile
モデル一覧を確認します。
$ ollama list
NAME ID SIZE MODIFIED
writer:latest 346a60dbd7d4 4.7 GB 17分前
llama3.1:latest 91ab477bec9d 4.7 GB 4時間前
どこでも実行
JuiceFS にダウンロードしたモデルは、複数の環境で共有利用可能です。
Linux での実行
すでに JuiceFS がマウントされている環境では、直接モデルを実行できます。
$ ollama run writer
Mac での実行
Mac 上では JuiceFS をマウントします。
$ juicefs mount example .llama --subdir=ollama
Mac 上の JuiceFS ファイルシステムのパーミッションを調整します。
hdls-mbp:blobs root# chmod 644 sha256-804a1f079a1166190d674bcfb0fa42270ec57a4413346d20c5eb22b26762d132
hdls-mbp:blobs root# chmod 644 sha256-db7eed3b8121ac22a30870611ade28097c62918b8a4765d15e6170ec8608e507
Kubernetes での実行
Kubernetes 用に JuiceFS CSI ドライバーを設定します。
PersistentVolume と PersistentVolumeClaim を作成します。
apiVersion: v1
kind: PersistentVolume
metadata:
name: ollama-vol
labels:
juicefs-name: ollama-vol
spec:
capacity:
storage: 10Pi
volumeMode: Filesystem
accessModes:
- ReadWriteMany
csi:
driver: csi.juicefs.com
volumeHandle: ollama-vol
fsType: juicefs
nodePublishSecretRef:
name: ollama-vol
namespace: kube-system
Deployment 定義を作成します。
apiVersion: apps/v1
kind: Deployment
metadata:
name: ollama
spec:
replicas: 1
template:
spec:
containers:
- name: ollama
image: registry.cn-hangzhou.aliyuncs.com/hdls/ollama:0.3.5
volumeMounts:
- mountPath: /root/.ollama
name: shared-data
subPath: ollama
volumes:
- name: shared-data
persistentVolumeClaim:
claimName: ollama-vol
API を通じてモデルを実行します。
$ curl http://your-ollama-svc:11434/api/generate -d '{
"model": "writer",
"prompt": "The sky is blue",
"stream": false
}'
まとめ
Ollama は大規模モデルを簡単にローカルで実行できるツールです。JuiceFS は分散型のファイルシステムを提供し、一度ダウンロードしたモデルを複数の環境で共有利用可能にします。