【llama-cpp-python】ローカル環境でのLLMの使い方!

【llama-cpp-python】ローカルで軽量LLMを動かす

llama-cpp-pythonはローカル環境でLLMが使える無料のライブラリです。

llama.cppをpythonで動かすことができるため、簡単に環境構築ができます。

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

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

目次

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

STEP
Dockerfileの作成

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

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

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

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'

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

STEP
コンテナの起動

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

docker compose up

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

http://localhost:8888/

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

llama-cpp-pythonの実装

見出し画像

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

STEP
ライブラリのインポート

Jupyter Labのコードセルに次のコマンドを実行して、ライブラリをインポートします。

from llama_cpp import Llama
from huggingface_hub import login
STEP
Hugging Faceにログイン

Hugging Faceにログインします。

token = "****************************"
login(token)

token = “****************************”にHugging Faceのアクセストークンが入ります。

Hugging Faceのアクセストークンの発行方法は以下の記事で解説しています。

STEP
モデルとトークナイザーの設定

モデルとトークナイザーを読み込みます。

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”

量子化モデルは複数ありますので、詳細のファイルを指定をしています。

モデルを読み込む際にGPUメモリを消費しますので、余裕を持ったGPUメモリをご用意ください。

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

JSON形式で、日本語での応答ができています!

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

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

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

GPUSOROBAN
GPUSOROBAN

GPUSOROBANは、生成AI・LLM向けの高速GPUを業界最安級の料金で使用することができます。

インターネット環境さえあれば、クラウド環境のGPUサーバーをすぐに利用可能です。

大規模な設備投資の必要がなく、煩雑なサーバー管理からも解放されます。

よかったらシェアしてね!
  • 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技術の使い方をわかりやすく紹介します。

    目次