日本語LLMをオンプレミス環境で実行する

モチベーション

2023年を振り返ってみると、多くの日本語LLM(Large Language Models)がリリースされた一年だった。自分もいくつかの日本語LLMを自宅の環境で動作させてみたので、ここにまとめる。

情報源

自分が日本語LLMを試す際にコードを参考にしたページを以下に示す。最後の数字はパラメータ数を表している、7bは70億パラメータ、13bは130億パラメータである。

  1. Calm2 7b サーバーエージェントの日本語LLM
  2. ELYZA-japanese-Llama-2-7b ELYZAがLlama-2-7b-chat-hfをベースに開発した日本語LLM。
  3. ELYZA-japanese-Llama-2-13b Llama2をベースにELYZAが開発した日本語LLM。
  4. Japanese StableLM Instruct Alpha 7B v2 Stability AIの日本語LLM
  5. Japanese Stable LM Beta 7B Stability AIの日本語LLM
  6. Youri-7B RinnaがLlama2をベースに開発した日本語LLM

動作環境

サーバー環境

サーバー名 Jupiter Ganymede
CPU Xeon E5-1620 3.60GHz Xeopn E5-2620 2.00GHz
memory 64GB 64GB
GPU NVIDIA TITAN V RTX A4000
OS Ubuntu 22.04.3 LTS Ubuntu 22.04.3 LTS

JupyterLab

それぞれの日本語LLMは、次のDockerfileで作製したJupyterLab上で動作させた。

# JupyterLabが使えるDockerイメージ
# 自分がこれまで作成したNoteBookに必要なパッケージをインストールしたもの。

FROM nvidia/cuda:11.8.0-cudnn8-devel-ubuntu22.04

# Set bash as the default shell
ENV SHELL=/bin/bash

# Build with some basic utilities
RUN apt-get update && apt-get install -y \
    python3-pip apt-utils vim \
    git git-lfs \
    curl unzip wget

# alias python='python3'
RUN ln -s /usr/bin/python3 /usr/bin/python

RUN pip install --upgrade pip setuptools \
        && pip install torch==2.0.1 torchvision==0.15.2 torchaudio==2.0.2 \
        --index-url https://download.pytorch.org/whl/cu118 \
        && pip install jupyterlab matplotlib pandas scikit-learn ipywidgets \
        && pip install transformers accelerate sentencepiece einops \
        && pip install langchain bitsandbytes auto-gptq protobuf

# Create a working directory
WORKDIR /workdir

# Port number in container side
EXPOSE 8888

ENTRYPOINT ["jupyter-lab", "--ip=0.0.0.0", "--port=8888", "--no-browser", "--allow-root", "--NotebookApp.token=''"]

CMD ["--notebook-dir=/workdir"]

コード

dockerコンテナとして起動したJupyterLabのセルに、情報源で示したページのコードをコピペして実行した。

実行結果

Jupiter Ganymede
Calm2 7b
ELYZA-japanese-Llama-2-7b ×
ELYZA-japanese-Llama-2-13b
Japanese StableLM Instruct Alpha 7B v2 ×
Japanese Stable LM Beta 7B
Youri-7B

凡例「○/△/×/-」の意味は次のとおり。

○:質問の回答を返す。(一部出力が切れているケースもあり)

△:次のメッセージを表示し、CPU側にオフロードして実行。   WARNING:root:Some parameters are on the meta device device because they were offloaded to the cpu.

×:CUDA out of memory

-:実行していない。

今後について

130億パラメータが、16GBのRTX A4000で、オフロードするも動作したのは、少し驚きである。 12GBのTITAN Xでは、LLMは少し荷が重い。量子化を調べる方向もあるが、DeepSpeedで使ってモデル並列化について調べていきたい。

DeepSpeedは2024年の課題として取り組むことにする。