Ollama と JuiceFS:一度のダウンロードでどこでも実行

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 は分散型のファイルシステムを提供し、一度ダウンロードしたモデルを複数の環境で共有利用可能にします。

タグ: Ollama JuiceFS Kubernetes CSI Driver

8月20日 06:18 投稿