OllamaをPythonで使いたい!ローカルLLMを快適に動かす!

OllamaをPythonで使いたい!ローカルLLMを快適に動かす!

ollama-pythonはPython環境でOllamaが使える無料のライブラリです。

ollama-pythonを利用すれば、ローカルLLMをAPIで簡単に活用できたり、RAGやエージェントへの統合も柔軟に行えます。

この記事では、ollama-pythonの環境構築からモデルを使ったテキスト生成の方法まで紹介します。

11/27開催のウェビナーをお知らせ!

目次

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のインストール方法は以下の記事をご覧ください。

STEP
Dockerfileの作成

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"]

[Ctrl + S]キーで変更内容を保存し、[Ctrl + X]キーで編集モードから抜けます。

コマンドの解説

curl -fsSL https://ollama.com/install.sh | sh

Linux用のOllamaをインストールします。

pip install ollama

ollama-pythonをインストールします。

STEP
docker-compose.ymlファイルの作成

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'

[Ctrl + S]キーで変更内容を保存し、[Ctrl + X]キーで編集モードから抜けます。

コマンドの解説

bash -c ‘/usr/local/bin/ollama serve’

Docker起動時にollamaサーバーを起動するコマンドです。ollamaサーバーが起動していないと、ollama-pythonも動作しないためご注意ください。

STEP
コンテナの起動

docker-compose.ymlの記述をもとに、Dockerコンテナを構築して起動します。    

docker compose up

コンテナが起動したら、ローカルPCの「ブラウザの検索窓」に以下のURLを入力し、Enterを押すとOllamaの画面が表示されます。

http://localhost:8888/

この記事では、ローカルポート8888を使用してJupyterLabを起動しています。

ollama-pythonの実装

見出し画像

Dockerコンテナで起動したJupyter Lab上で、ollama-pythonの実装をします。

STEP
LLMのダウンロード

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"

「 Llama-3.1-70B-Instruct-Q4_K_M.gguf」は45GB程度のGPUメモリを使用します。

STEP
ollama-pythonでOllama用のモデル作成

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-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}

JSON形式でレスポンスができています!

APIの仕様を詳しく知りたい方は、OllamaのAPIドキュメントをご覧ください。

生成AI・LLMのコストでお困りなら

GPUのスペック不足で生成AIの開発が思うように進まないことはありませんか?

そんなときには、高性能なGPUをリーズナブルな価格で使えるGPUクラウドサービスがおすすめです!

GPUSOROBAN
GPUSOROBAN

GPUSOROBANは、高性能GPU「NVIDIA H200」を業界最安級の料金で使用することができます。

NVIDIA H200は、生成AI・LLMの計算にかかる時間を大幅に短縮することが可能です。

クラウドで使えるため、大規模な設備投資の必要がなく、煩雑なサーバー管理からも解放されます。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
EdgeHUBロゴ

メールマガジン登録

Stable Diffusion・LLM・RAGに関する最新情報をいち早くお届けします。

無料メルマガの配信をご希望の方は、下記フォームよりご登録ください。

    EdgeHUB編集部からのお知らせ

    無料ウェビナーのお知らせ

    11/27ウェビナー

    RAG×日本語LLMの無料オンラインウェビナー第2弾!

    開催日時:
    2024年11月27日(水) 14:00~15:00

    内容:

    • 「LlamaIndex」と「Llama-3.1-Swallow」でRAG環境を構築
    • 生成AI開発の強い味方「GPUSOROBAN」の活用方法

    このウェビナーでは、オープンソース「LlamaIndex」で構築したRAGの使い方や、デモを紹介します。

    生成AIに関心のある方、AI技術をビジネスに活かしたい方は、ぜひこの貴重な機会にご参加ください!

    こんな方におすすめ!

    • 日本語LLMの利用を検討している方
    • AI開発に携わっている方
    • 最新のAI技術やトレンドに興味がある方
    • GPUスペック不足に悩んでいる方

    \簡単1分で申し込み!/

    この記事を書いた人

    EdgeHUBは、NVIDIAクラウドパートナーである株式会社ハイレゾが運営しています。「AIと共にある未来へ繋ぐ」をテーマに、画像生成AI、文章生成AI、動画生成AI、機械学習・LLM、Stable Diffusionなど、最先端の生成AI技術の使い方をわかりやすく紹介します。

    目次