ollama-pythonはPython環境でOllamaが使える無料のライブラリです。
ollama-pythonを利用すれば、ローカルLLMをAPIで簡単に活用できたり、RAGやエージェントへの統合も柔軟に行えます。
この記事では、ollama-pythonの環境構築からモデルを使ったテキスト生成の方法まで紹介します。
ollama-pythonとは
ollama-pythonはPython環境でOllamaが使える無料のライブラリです。
ollama-pythonを利用すれば、ローカルLLMをAPIで簡単に活用できたり、RAGやエージェントへの統合も柔軟に行えます。
この記事では、ollama-pythonの環境構築から使い方まで紹介します。
OllamaをChatGPTのようなインターフェイスで使う方法は、別記事で解説しています。
ollama-pythonの実行環境
LLMのモデルを使う際に、GPUが必要になります。
この記事では、次のようなGPUを搭載した環境を用意しています。
- GPU:NVIDIA A100
- GPUメモリ(VRAM:80GB)
- OS:Ubuntu 22.04LTS
Windowsをお使いの方は、Ubuntuをインストールする記事をご覧ください。
ollama-pythonの環境構築
この記事では、Dockerコンテナを使ってollama-pythonの環境を構築します。
Dockerのインストール方法は以下の記事をご覧ください。
CUDA、Python、ollamaをインストールするDockerfileを作成します。
- CUDA:12.1
- Python:3.10
- ollama
Ubuntuのコマンドラインで、Dockerfileを作成します。
mkdir ollama_python
cd ollama_python
nano Dockerfile
Dockerfileに以下の記述を貼り付けます。
# ベースイメージ(CUDA)の指定
FROM nvidia/cuda:12.1.0-cudnn8-devel-ubuntu22.04
# 必要なパッケージをインストール
RUN apt-get update && apt-get install -y python3-pip python3-venv git nano curl
# Ollamaをインストール
RUN curl -fsSL https://ollama.com/install.sh | sh
# 作業ディレクトリを設定
WORKDIR /app
# アプリケーションコードをコピー
COPY . /app
# Python仮想環境の作成
RUN python3 -m venv /app/.venv
# 仮想環境をアクティベートするコマンドを.bashrcに追加
RUN echo "source /app/.venv/bin/activate" >> /root/.bashrc
# JupyterLabのインストール
RUN /app/.venv/bin/pip install Jupyter jupyterlab
# LangChain関連のインストール
RUN /app/.venv/bin/pip install ollama
# コンテナの起動時にbashを実行
CMD ["/bin/bash"]
curl -fsSL https://ollama.com/install.sh | sh
Linux用のOllamaをインストールします。
pip install ollama
ollama-pythonをインストールします。
Dockerの設定をするためのdocker-compose.ymlを作成します。
nano docker-compose.yml
開いたdocker-compose.ymlファイルに以下の記述をコピーして貼りつけます。
services:
ollama_python:
build:
context: .
dockerfile: Dockerfile
image: ollama_python
runtime: nvidia
container_name: ollama_python
ports:
- "8888:8888"
volumes:
- .:/app/ollama_python
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 1
capabilities: [gpu]
command: >
bash -c '/usr/local/bin/ollama serve & /app/.venv/bin/jupyter lab --ip="*" --port=8888 --NotebookApp.token="" --NotebookApp.password="" --no-browser --allow-root'
bash -c ‘/usr/local/bin/ollama serve’
Docker起動時にollamaサーバーを起動するコマンドです。ollamaサーバーが起動していないと、ollama-pythonも動作しないためご注意ください。
docker-compose.ymlの記述をもとに、Dockerコンテナを構築して起動します。
docker compose up
コンテナが起動したら、ローカルPCの「ブラウザの検索窓」に以下のURLを入力し、Enterを押すとOllamaの画面が表示されます。
http://localhost:8888/
ollama-pythonの実装
Dockerコンテナで起動したJupyter Lab上で、ollama-pythonの実装をします。
Llama3.1の日本語LLM「 Llama-3.1-70B-Instruct-Q4_K_M.gguf」をダウンロードします。
!curl -L -o Llama-3.1-70B-Instruct-Q4_K_M.gguf "https://huggingface.co/mmnga/Llama-3.1-70B-Instruct-gguf/resolve/main/Llama-3.1-70B-Instruct-Q4_K_M.gguf?download=true"
LLMの実行にはOllamaのpythonライブラリを使用します。
LLMのモデルがOllama使えるようにプロンプトテンプレートを指定して、モデルを作成します。
import ollama
modelfile='''
FROM ./Llama-3.1-70B-Instruct-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(model='cyberllama31:70b', modelfile=modelfile)
FROM ./Llama-3.1-70B-Instruct-Q4_K_M.gguf
ダウンロードしたモデルのパスが入ります。
TEMPLATE “””{{ if .System }}<|start_header_id|>system<|end_header_id|>…
モデルで使用するプロンプトテンプレートが入ります。
ollama.create(model=’cyberllama31:70b’, modelfile=modelfile)
モデルとプロンプトテンプレートを使ってOllama用のモデルを作成します。model
にはOllamaで呼び出す際に使用する名前をつけられます。
ollama.createのエラー「invalid digest format」の解消方法
ollama-pythonの使い方
ollama-pythonを使って、会話形式のチャットやAPIリクエストの実行を試してみます。
会話形式のチャット
「プレゼンテーションの資料作成時のチェックポイントを教えて下さい」というプロンプトを日本語で実行してみます。
response = ollama.chat(model='cyberllama31:70b', messages=[
{
'role': 'user',
'content': 'プレゼンテーションの資料作成時のチェックポイントを教えて下さい。',
},
])
print(response['message']['content'])
プレゼンテーションの資料作成時のチェックポイントを教えて下さい。
1.目的と対象: プレゼンテーションを行う目的が明確になっているか、そしてその内容が聴衆に合ったものであるかを確認すること。
2.構成: はじめに、結論、各項の説明が適切に配置されているかを確認する。一般的には三段構成(はじめ・なか・おわり)が基本となる。
3.資料の量と内容: 資料が多すぎず、内容も適切で簡潔であることを確認する。多すぎると聴衆が把握しにくくなり、逆に少なすぎると伝えたいことが伝わりにくい。
4.表現力: 文字のフォントやサイズ、色、画像の使用など、視覚的な要素も含めて、全体的に見やすく、読みやすい配慮がされているかを確認する。特に、文字が小さすぎず、重要なポイントは明示的である。
5.グラフや図表: 使用しているグラフや図表が、データの説明に効果的でわかりやすいかを確認する。また、グラフや図表自体も正確かどうかもチェック。
6.配色: カラースキームが統一されており、見た目が美しく、印象的な配色になっているかを確認する。特に、背景と文字のコントラストは十分にあるべきである。
7.タイムマネジメント: プレゼンテーション全体の時間にあわせて、各項の説明が適切な長さになっているかを確認する。
8.練習: 本番前に何度も練習し、スムーズに進行できるようにする。
APIリクエストの実行
「社内規定を作る際の要点を教えて下さい。」というAPIリクエストを実行してみます。
import requests
import json
url = 'http://localhost:11434/api/chat'
data = {
"model":"cyberllama31:70b",
"messages": [
{
"role": "user",
"content": "社内規定を作る際の要点を教えて下さい。"
}
],
"stream": False
}
response = requests.post(url, data=json.dumps(data))
response_data = response.json()
print(response_data)
社内規定を作る際の要点を教えて下さい。
{‘model’: ‘cyberllama31:70b’, ‘created_at’: ‘2024-08-18T12:01:06.436293778Z’, ‘message’: {‘role’: ‘assistant’, ‘content’: ‘社内規定を作成する際のポイントは以下の通りです。\n\n1. **目的と範囲**: 社内規定の目的と適用範囲を明確にします。\n2. **簡潔かつ明確な文言**: 規則を簡単に理解できるように、簡潔で明確な文言を使います。\n3. **具体的かつ実行可能**: 社員が容易に従える内容にするため、具体的かつ実行可能な規定にします。\n4. **一貫性**: 社内全体で一貫したルールを適用するようにします。\n5. **更新と改正**: 時代の変化や会社の成長に合わせて随時見直し、必要に応じて変更を行います。’}, ‘done_reason’: ‘stop’, ‘done’: True, ‘total_duration’: 8272226469, ‘load_duration’: 72153044, ‘prompt_eval_count’: 25, ‘prompt_eval_duration’: 97571000, ‘eval_count’: 179, ‘eval_duration’: 8059330000}
APIの仕様を詳しく知りたい方は、OllamaのAPIドキュメントをご覧ください。
生成AI・LLMのコストでお困りなら
GPUのスペック不足で生成AIの開発が思うように進まないことはありませんか?
そんなときには、高性能なGPUをリーズナブルな価格で使えるGPUクラウドサービスがおすすめです!
GPUSOROBANは、高性能GPU「NVIDIA H200」を業界最安級の料金で使用することができます。
NVIDIA H200は、生成AI・LLMの計算にかかる時間を大幅に短縮することが可能です。
クラウドで使えるため、大規模な設備投資の必要がなく、煩雑なサーバー管理からも解放されます。