vLLMはローカル環境でLLMが使える無料のライブラリです。
vLLMを使えば、LLMによるテキスト生成を高速に行えるようになります。
この記事では、vLLMの環境構築からモデルを使ったテキスト生成の方法まで紹介します。
vLLMとは
vLLMはローカル環境でLLMが使える無料のライブラリです。
vLLMを使うことで、LLMによるテキスト生成を高速に行えるようになります。
vLLMではHuggingFaceで提供されているモデルを使うことができ、量子化モデルもサポートしています。
vLLMの実行環境
LLMのモデルを使う際に、GPUが必要になります。
この記事では、次のようなGPUを搭載した環境を用意しています。
- GPU:NVIDIA A100
- GPUメモリ(VRAM:80GB)
- OS:Ubuntu 22.04LTS
Windowsをお使いの方は、Ubuntuをインストールする記事をご覧ください。
vLLMの環境構築
この記事では、Dockerコンテナを使ってvLLMの環境を構築します。
Dockerのインストール方法は以下の記事をご覧ください。
CUDA、Python、vllmをインストールするDockerfileを作成します。
- CUDA:12.1
- Python:3.10
- vLLM
- JupyterLab
Ubuntuのコマンドラインで、Dockerfileを作成します。
mkdir vllm
cd vllm
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
# vllmのインストール
RUN /app/.venv/bin/pip install vllm
# コンテナの起動時にbashを実行
CMD ["/bin/bash"]
Dockerの設定をするためのdocker-compose.ymlを作成します。
nano docker-compose.yml
開いたdocker-compose.ymlファイルに以下の記述をコピーして貼りつけます。
services:
vllm:
build:
context: .
dockerfile: Dockerfile
image: vllm
runtime: nvidia
container_name: vllm
ports:
- "8888:8888"
volumes:
- .:/app/vllm
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を押すとJupyterLabの画面が表示されます。
http://localhost:8888/
vLLMの実装
Dockerコンテナで起動したJupyter Lab上で、vLLMの実装をします。
Jupyter Labのコードセルに次のコマンドを実行して、ライブラリをインポートします。
from vllm import LLM, SamplingParams
モデルとトークナイザーを読み込みます。
llm = LLM(
model="elyza/Llama-3-ELYZA-JP-8B-AWQ",
quantization="awq"
)
tokenizer = llm.get_tokenizer()
model=”elyza/Llama-3-ELYZA-JP-8B-AWQ”
モデルのタイプを指定しています。vLLMではHuggingFaceのモデルが利用できます。
quantization=”awq”
量子化の方式を指定しています。
llm.get_tokenizer()
トークナイザーを読み込みます。
vLLMでテキスト生成
vLLMを使って、日本語での質問応答を試してみます。
日本語での質問応答
「石川県のご当地グルメを教えて下さい。」というプロンプトを日本語で実行してみます。
DEFAULT_SYSTEM_PROMPT = "あなたは日本人のアシスタントです。"
text = "石川県のご当地グルメを教えて下さい。"
messages = [
{"role": "system", "content": DEFAULT_SYSTEM_PROMPT},
{"role": "user", "content": text},
]
prompt = tokenizer.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=True
)
sampling_params = SamplingParams(
temperature=0.6,
top_p=0.9,
max_tokens=1000
)
outputs = llm.generate(prompt, sampling_params)
print(output.outputs[0].text)
石川県のご当地グルメを教えて下さい。
石川県のご当地グルメは、海の幸を活かした美味しいものが多いです。以下は、代表的な石川県のご当地グルメです。
1. 加賀屋のカレー: 加賀屋は金沢市の老舗のカレー店で、カレーを石川県のご当地グルメとして提唱しています。独特のスパイスのブレンドと、サフランライスが特徴です。
2. 金沢カレー: 金沢カレーは、金沢市のカレー店が発祥で、石川県のご当地カレーとして知られています。ルーは茶色く、スパイスが効いています。サフランライスと共に提供されることが多く、具は、豚肉や玉ねぎ、人参、ジャガイモなどです。
3. 能登ののどぐろ: 能登半島ののどぐろは、石川県のご当地グルメの代表格です。のどぐろは、タツノオトシゴのことです。のどぐろは、脂がのっていて、身は白身で、上品な味と食感です。塩焼きや、煮付け、揚げ物などで提供されます。
4. 加賀野菜のいろいろ: 石川県は、加賀野菜の生産が盛んで、加賀野菜は、石川県のご当地グルメの原料として使われています。加賀野菜は、白菜、キャベツ、ブロッコリー、カリフラワー、などが代表的です。
生成AI・LLMのコストでお困りなら
GPUのスペック不足で生成AIの開発が思うように進まないことはありませんか?
そんなときには、高性能なGPUをリーズナブルな価格で使えるGPUクラウドサービスがおすすめです!
GPUSOROBANは、生成AI・LLM向けの高速GPUを業界最安級の料金で使用することができます。
インターネット環境さえあれば、クラウド環境のGPUサーバーをすぐに利用可能です。
大規模な設備投資の必要がなく、煩雑なサーバー管理からも解放されます。