llama-cpp-pythonはローカル環境でLLMが使える無料のライブラリです。
llama.cppをpythonで動かすことができるため、簡単に環境構築ができます。
この記事では、llama-cpp-pythonの環境構築からモデルを使ったテキスト生成の方法まで紹介します。
llama-cpp-pythonとは
llama-cpp-pythonはローカル環境でLLMが使える無料のライブラリです。
llama.cppをpythonで動かすことができるため、簡単に環境構築ができます。
GGUFフォーマットの量子化モデルをサポートしています。
llama-cpp-pythonの実行環境
LLMのモデルを使う際に、GPUが必要になります。
この記事では、次のようなGPUを搭載した環境を用意しています。
- GPU:NVIDIA A100
- GPUメモリ(VRAM:80GB)
- OS:Ubuntu 22.04LTS
Windowsをお使いの方は、Ubuntuをインストールする記事をご覧ください。
llama-cpp-pythonの環境構築
この記事では、Dockerコンテナを使ってllama-cpp-pythonの環境を構築します。
Dockerのインストール方法は以下の記事をご覧ください。
CUDA、Python、llama-cpp-pythonをインストールするDockerfileを作成します。
- CUDA:12.1
- Python:3.10
- llama-cpp-python
- jupyterlab
- huggingface_hub[cli]
Ubuntuのコマンドラインで、Dockerfileを作成します。
mkdir llamacpp
cd llamacpp
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
# 作業ディレクトリを設定
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 huggingface_hub[cli]
# llama-cpp-pythonのインストール
RUN /app/.venv/bin/pip install llama-cpp-python
# コンテナの起動時にbashを実行
CMD ["/bin/bash"]
Dockerの設定をするためのdocker-compose.ymlを作成します。
nano docker-compose.yml
開いたdocker-compose.ymlファイルに以下の記述をコピーして貼りつけます。
services:
llamacpp:
build:
context: .
dockerfile: Dockerfile
image: llamacpp
runtime: nvidia
container_name: llamacpp
ports:
- "8888:8888"
volumes:
- .:/app/llamacpp
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 1
capabilities: [gpu]
command: >
bash -c '/app/.venv/bin/jupyter lab --ip="*" --port=8888 --NotebookApp.token="" --NotebookApp.password="" --no-browser --allow-root'
docker-compose.ymlの記述をもとに、Dockerコンテナを構築して起動します。
docker compose up
コンテナが起動したら、ローカルPCの「ブラウザの検索窓」に以下のURLを入力し、Enterを押すとOllamaの画面が表示されます。
http://localhost:8888/
llama-cpp-pythonの実装
Dockerコンテナで起動したJupyter Lab上で、llama-cpp-pythonの実装をします。
Jupyter Labのコードセルに次のコマンドを実行して、ライブラリをインポートします。
from llama_cpp import Llama
from huggingface_hub import login
Hugging Faceにログインします。
token = "****************************"
login(token)
Hugging Faceのアクセストークンの発行方法は以下の記事で解説しています。
モデルとトークナイザーを読み込みます。
llm = Llama.from_pretrained(
repo_id="elyza/Llama-3-ELYZA-JP-8B-GGUF",
filename="Llama-3-ELYZA-JP-8B-q4_k_m.gguf",
verbose=False
)
repo_id=”elyza/Llama-3-ELYZA-JP-8B-GGUF”
モデルのタイプを指定しています。llama-cpp-pythonでは、GGUF形式をサポートしています。
filename=”Llama-3-ELYZA-JP-8B-q4_k_m.gguf”
量子化モデルは複数ありますので、詳細のファイルを指定をしています。
llama-cpp-pythonでテキスト生成
llama-cpp-pythonを使って、日本語での質問応答を試してみます。
日本語での質問応答
「宮崎の観光地を教えて下さい。」というプロンプトを日本語で実行してみます。
llm.create_chat_completion(
messages = [
{"role": "system", "content": "あなたは日本語で回答するアシスタントです"},
{"role": "user", "content": "宮崎の観光地を教えて下さい。"}
]
)
宮崎の観光地を教えて下さい。
{‘id’: ‘chatcmpl-9a0cbf95-e479-453a-8656-4f8dfa1235bd’,
‘object’: ‘chat.completion’,
‘created’: 1720092947,
‘model’: ‘/root/.cache/huggingface/hub/models–elyza–Llama-3-ELYZA-JP-8B-GGUF/snapshots/4367e810791b8f647b1cb14452ec390654ad9ef9/./Llama-3-ELYZA-JP-8B-q4_k_m.gguf’,
‘choices’: [{‘index’: 0,
‘message’: {‘role’: ‘assistant’,
‘content’: ‘宮崎県には、自然豊かで美しい景色や温泉、歴史的建造物など多くの観光スポットがあります。以下はその一部です。\n\n1. 高千穂峡: 宮崎県の高千穂町にある渓谷で、国の名勝に指定されています。深い谷間には、奇岩や滝が点在し、自然の美しさを堪能できます。\n2. 日南海岸: 宮崎県の日南市から串間市にかけて続く海岸線は、白い砂浜と青い海が特徴的です。ドライブや散策に最適な観光地です。\n3. 霧島神宮: 霧島連山の麓にある神社で、パワースポットとして知られています。境内には、多くの木々や花が咲き乱れ、美しい景色を堪能できます。\n4. 宮崎市フェニックス自然動物園: 動物園と植物園が合わさった施設で、様々な動物や植物を観察することができます。特に、世界各地の熱帯植物は見どころです。\n5. 青島神社: 日南海岸にある小島で、青い海と白い砂浜が美しい景色を創り出しています。神社もあり、パワースポットとして知られています。\n\nこれらの観光地は、宮崎県の自然や文化を堪能することができます。’},
‘logprobs’: None,
‘finish_reason’: ‘stop’}],
‘usage’: {‘prompt_tokens’: 40, ‘completion_tokens’: 344, ‘total_tokens’: 384}}
生成AI・LLMのコストでお困りなら
GPUのスペック不足で生成AIの開発が思うように進まないことはありませんか?
そんなときには、高性能なGPUをリーズナブルな価格で使えるGPUクラウドサービスがおすすめです!
GPUSOROBANは、生成AI・LLM向けの高速GPUを業界最安級の料金で使用することができます。
インターネット環境さえあれば、クラウド環境のGPUサーバーをすぐに利用可能です。
大規模な設備投資の必要がなく、煩雑なサーバー管理からも解放されます。