catch-img

【Llama2】Windows GPUでの使い方 | ローカル環境

この記事では、ローカルのWindows環境を使ってLlama2によるテキスト生成をする方法(推論)について紹介しています。


目次[非表示]

  1. 1.Llama2とは
  2. 2.Metaへのモデル利用申請とHuggingFaceの設定
  3. 3.実行環境
  4. 4.NVIDIAドライバのアップグレード
  5. 5.WSL・Ubuntuのインストール
  6. 6.Dockerのリポジトリを設定する
  7. 7.Dockerをインストールする
  8. 8.NVIDIA Container Toolkitのインストール
  9. 9.Dockerデーモンの設定
  10. 10.docker-composeファイルの作成
  11. 11.必要なパッケージをインストール
  12. 12.モデルの設定
  13. 13.テキスト生成(推論)
    1. 13.1.プロンプトの実行
    2. 13.2.生成結果
    3. 13.3.日本語翻訳
  14. 14.LLMならGPUクラウド
  15. 15.まとめ


Llama2とは

Llama2(ラマツー)とは、Facebookを運営するMeta社が開発した言語生成AI(LLM)で、OpenAI社のChatGPTに匹敵するの性能を持っています。


Llama2の特徴としては、軽量モデルで高性能、そして無料で使えるオープンソースであるため、

開発者にとって扱いやすいモデルになっています。

llama2


Llama2の詳細については、以下の記事で解説しています。


  Llama2とは?使い方・日本語性能・商用利用について解説 | 初心者ガイド この記事では、Llama2について幅広く解説しています。Llama2の性能や安全性、商用利用、日本語対応、様々な環境での使い方などに触れています。 業界最安級GPUクラウド | GPUSOROBAN


Metaへのモデル利用申請とHuggingFaceの設定

Llama2を利用する前に、Meta社へのモデル利用の申請とHuggingFaceの設定の準備を行います。
設定が完了したら、HuggingFaceのアクセストークンを後で使いますので、メモしておきます。

Metaへのモデル利用申請・HuggingFaceの設定方法について、以下の記事で詳しく解説しています。


  【Llama2】Meta・HuggingFaceへの利用申請 この記事では、Llama2を使用するためのMeta・HuggingFaceへの利用申請について解説しています。 業界最安級GPUクラウド | GPUSOROBAN


実行環境

この記事では以下のスペックのローカル環境のWidows PCを使用しました。

  • OS:Windows 11
  • GPU:NVIDIA A4000
  • GPUメモリ(VRAM):16GB


NVIDIAドライバのアップグレード

NVIDIA Driverを最新版にアップグレードします。(NVIDIAドライバ515以上)

NVIDIAドライバダウンロードのページを開きます。

  最新の NVIDIA 公式ドライバーをダウンロード 最新の NVIDIA 公式ドライバーをダウンロード https://www.nvidia.co.jp/Download/index.aspx?lang=jp


ご使用のGPUのタイプにあわせて項目を選択します。

[オペレーティングシステム]はお使いのOSを選択してください。

[ダウンロードタイプ]は”Studio”が含まれる項目を選択してください。

項目を選択したら、[探す]ボタンを押します。

以下はGPUがNVIDIA RTX A4000の場合の例です。

llama-widows-gpu


続けて[ダウンロード]ボタン、[ダウンロードの同意]をクリックし、インストーラーをダウンロードします。

llama-widows-gpu


ダウンロードした[インストーラー]を実行し、インストールを開始します。

llama-widows-gpu


[NVIDIAインストーラーが終了しました]の表示がでたら、NVIDIAドライバのインストールが完了です。

llama-widows-gpu


WSL・Ubuntuのインストール

[スタート]から[コマンドプロンプト]を開きます。

llama-widows-gpu


コマンドプロンプトで次のコマンドを実行し、wsl2およびUbuntuをインストールします。

[Enter new UNIX username:] と表示がされるのでユーザー名を設定します。

この記事では”user”をユーザー名として設定します。

[New password:] と表示がされるので任意のパスワードを設定します。

wsl --install

llama-widows-gpu


Windowsを再起動し、変更を有効化します。


コマンドプロンプトで次のコマンドを実行し、WSLのバージョンを確認します。

wsl --list --verbose

llama-widows-gpu


VERSIONが[1]の場合は、次のコマンドを実行し、既存のディストリビューションをWSL2 に変更します。

※VERSIONが既に[2]の場合は、このステップは飛ばしてください。

wsl --set-version ubuntu 2


Wiindowsの[スタート]から”Ubuntu”を検索し、起動します。

llama-widows-gpu


Dockerのリポジトリを設定する

Ubuntuのコマンドラインからapt パッケージを更新します

sudo apt update

llama-widows-gpu


必要なパッケージをインストールします。

sudo apt install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common

llama-widows-gpu


DockerのGPGキーを保存するためのディレクトリを作成します。

sudo mkdir -p /etc/apt/keyrings


Dockerの公式GPGキーをダウンロードし、ディレクトリに格納します。

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg


ファイルのアクセス許可を変更して、読み取り可能にします。

sudo chmod a+r /etc/apt/keyrings/docker.gpg


DockerのAPTリポジトリを /etc/apt/sources.list.d/docker.listファイルに追加します。

echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null


aptパッケージをアップデートします。

sudo apt update


Dockerをインストールする

docker最新版をインストールします。

sudo apt install docker-ce docker-ce-cli containerd.io


NVIDIA Container Toolkitのインストール

リポジトリとGPGキーのセットアップをします。

distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
      && curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
      && curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | \
            sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
            sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list

llama-widows-gpu


パッケージをアップデートします。

sudo apt update


nvidia-container-toolkitをインストールします。

sudo apt install -y nvidia-container-toolkit


Dockerデーモンの設定

NVIDIA コンテナー ランタイムを認識するように Docker デーモンを構成します。

sudo nvidia-ctk runtime configure --runtime=docker


デフォルトのランタイムを設定した後、Docker デーモンを再起動してインストールを完了します。

sudo service docker restart


Dockerを使用するためにユーザーをDockerグループに追加する

sudo usermod -aG docker user


新しいグループにユーザーを切り替えます。

newgrp docker


再度Dockerを再起動します。

sudo service docker restart


docker-composeファイルの作成

次をインストールするdocker-composeのファイルを作成します。

  • cuda11.8
  • cuDNN8
  • ubuntu22.04
  • Pytorch2.1.0
  • JupyterLab


docker-compse.ymlファイルを新規作成し、開きます。

nano docker-compose.yml


開いたdocker-compose.ymlファイルに次のコマンドをコピペします。

version: '3.8'
services:
  pytorch-jupyter:
    image: nvidia/cuda:11.8.0-cudnn8-devel-ubuntu22.04
    container_name: pytorch-jupyter-container
    runtime: nvidia
    command: /bin/bash -c "apt-get update && apt-get install -y python3 python3-pip && pip install torch==2.1.0 torchvision==0.16.0 torchaudio==2.1.0 --index-url https://download.pytorch.org/whl/cu118 && pip install Jupyter jupyterlab && jupyter lab --ip='*' --port=8888 --NotebookApp.token='' --NotebookApp.password='' --no-browser --allow-root"
    ports:
      - "8888:8888"

llama-widows-gpu


編集が完了したら、[Ctrl]+[S]で変更を保存し、[Ctrl]+[X]で編集モードから抜けます。


次のコマンドを実行し、docker-composeをインストールします。

sudo apt install docker-compose


次のコマンドを実行し、dockerイメージのビルドとコンテナの起動を行います。

docker-compose up

llama-widows-gpu

llama-widows-gpu


[Jupyter Server is running at : http://localhost:8888/lab]の表示ができたら、Jupyter Serverの起動完了です。


ブラウザの検索窓に”localhost:8888”を入力すると、Jupyter Labをブラウザで表示できます。

localhost:8888


停止するときは、コマンドプロンプトの画面で[Ctrl] + [C]を押すとコンテナが停止します。
もしくは次のコマンドでコンテナを停止します。

docker-compose down


コンテナを再起動するときは次のコマンドを実行します。

docker-compose restart


必要なパッケージをインストール

Jupyter Labのホーム画面で[Python3 ipykernel]を選択し、Notebookを開きます。


llama-widows-gpu


Jupyter Labのコードセルで次のコマンドを実行し、必要なパッケージをインストールします。

pip install transformers sentencepiece accelerate bitsandbytes scipy

lama-widows-gpu


次のコマンドを実行し、必要なライブラリをインポートします。

import torch
from torch import cuda,bfloat16
from transformers import AutoTokenizer,AutoModelForCausalLM
import transformers

llama-widows-gpu



PyTorchからGPUを認識できるか確認します。

torch.cuda.is_available()


モデルの設定

HuggingFaceで利用申請したLlamaのモデルを読み込みます。

この段階でモデルがGPUメモリにロードされますので、しばらく時間がかかります。

model_id = "meta-llama/Llama-2-7b-chat-hf"


この記事ではLlama-2-7b-chat-hfのパラメータ7bのチャットモデルを使用していますが、他のモデルを使いたい場合は表を参考に適宜model_idを変更してください。

model_id

GPUメモリ(VRAM)使用量

※モデルには4bit量子化を使用

ストレージ使用量

使用したGPU

meta-llama/Llama-2-7b-hf

6.7GB

13GB

NVIDIA A4000 16GB x 1

meta-llama/Llama-2-13b-hf

10.3GB

25GB

NVIDIA A4000 16GB x 1

meta-llama/Llama-2-70b-hf

37.9GB

129GB

NVIDIA A100 80GB x 1

meta-llama/Llama-2-7b-chat-hf

6.7GB

13GB

NVIDIA A4000 16GB x 1

meta-llama/Llama-2-13b-chat-hf

10.1GB

25GB

NVIDIA A4000 16GB x 1

meta-llama/Llama-2-70b-chat-hf

37.9GB

129GB

NVIDIA A100 80GB x 1



HuggingFaceにアクセスするためのトークンを設定します。

token = 'hf_*************************'


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


  【Llama2】Meta・HuggingFaceへの利用申請 この記事では、Llama2を使用するためのMeta・HuggingFaceへの利用申請について解説しています。 業界最安級GPUクラウド | GPUSOROBAN


モデルの量子化の設定を行います。

量子化は、モデルのパラメータや活性化関数などを低bitに変換する技術で、モデルサイズを軽量化することができます。
[llm_int8_enable_fp32_cpu_offload=True]は、モデルの一部分をGPUで処理して、その他の部分をCPU上でオフロードするフラグになります。CPUでオフロードする場合、生成時間がかかりますので、GPUメモリが十分にある場合はこのフラグは削って構いません。

quant_config = transformers.BitsAndBytesConfig(
    load_in_4bit=True,
    bnb_4bit_quant_type="nf4",
    bnb_4bit_compute_dtype=torch.bfloat16,
    bnb_4bit_use_double_quant=True,
    llm_int8_enable_fp32_cpu_offload=True,
)



モデルを読み込みます。初回はモデルをダウンロードするため時間がかかりますが、
2回目以降はモデルの読み込みだけになりますので、時間はかかりません。

model = transformers.AutoModelForCausalLM.from_pretrained(
    model_id,
    trust_remote_code=True,
    token=token,
    quantization_config=quant_config,
    torch_dtype=torch.bfloat16,
     device_map={
        "model.layers": 0,
        "lm_head": "cpu",
        "model.norm": 0,
        "model.embed_tokens": 0,
    },
)



トークナイザーを読み込みます。

tokenizer = AutoTokenizer.from_pretrained(
    model_id,
    token=token
)


transformersライブラリの pipeline 関数を使用して、テキスト生成のためのパイプラインを構築します。

pipeline = transformers.pipeline(
    model=model,
    tokenizer=tokenizer,
    task="text-generation",
    repetition_penalty=1.1
)


テキスト生成(推論)

プロンプトの実行

 transformers.pipelineのrepetition_penalty=1.1について質問をしてます。

prompt = """USER:Please tell me about
pipeline = transformers.pipeline(
    repetition_penalty=1.1
)
SYSTEM:"""
sequences = pipeline(
    prompt,
    do_sample=True,
    temperature=0.8,
    top_p=0.95,
    top_k=40,
    num_return_sequences=1,
    eos_token_id=tokenizer.eos_token_id,
    max_length=300,
)
for seq in sequences:
    print(f"Result: {seq['generated_text']}")
Result: USER:Please tell me about
pipeline = transformers.pipeline(
    repetition_penalty=1.1
)


生成結果

SYSTEM:The `repetition_penalty` parameter in the `transformers.pipeline()` function is used to control the penalty for repeated tokens in the input sequence. By default, this parameter is set to 0.6. However, you have specified a value of 1.1, which means that the penalty for repeated tokens will be higher than the default value. This can help improve the performance of your model by reducing the impact of redundant or irrelevant information in the input sequence.


日本語翻訳

SYSTEM:「transformers.pipeline()」関数の「repetition_penalty」パラメータは、入力シーケンス内で繰り返されるトークンに対するペナルティを制御するために使用されます。 デフォルトでは、このパラメータは 0.6 に設定されています。 ただし、値 1.1 を指定しました。これは、トークンが繰り返された場合のペナルティがデフォルト値よりも高くなるという意味です。 これにより、入力シーケンス内の冗長または無関係な情報の影響が軽減され、モデルのパフォーマンスが向上します。


LLMならGPUクラウド

Llama2やその他のLLMを使用する際には、モデルサイズやタスクに応じて必要なスペックが異なります。

LLMで使用されるGPUは高価なため、買い切りのオンプレミスよりも、コストパフォーマンスが高く柔軟な使い方ができるGPUクラウドをおすすめしています。


GPUクラウドのメリットは以下の通りです。

  • 必要なときだけ利用して、コストを最小限に抑えられる
  • タスクに応じてGPUサーバーを変更できる
  • 需要に応じてGPUサーバーを増減できる
  • 簡単に環境構築ができ、すぐに開発をスタートできる
  • 新しいGPUを利用できるため、陳腐化による買い替えが不要
  • GPUサーバーの高電力・熱管理が不要


コスパをお求めなら、メガクラウドと比較して50%以上安いGPUクラウドサービス「GPUSOROBAN」がおすすめです。


  生成AIに最適なGPUクラウド「高速コンピューティング」|GPUSOROBAN GPUSOROBANの高速コンピューティングは、NVIDIAの高速GPUが業界最安級で使えるクラウドサービスです。NVIDIA A100を始めする高速GPUにより、画像生成AI、大規模言語モデルLLM、機械学習、シミュレーションを高速化します。 業界最安級GPUクラウド | GPUSOROBAN


まとめ

この記事では、Windowsの環境でLlama2を用いて推論をする方法を紹介しました。

Llama2は無料で使えて商用利用可能な利便性の高いモデルでありながら、ChatGPTと同等以上の性能があります。

Llama2に関する詳細な情報は、以下の記事でまとめて紹介していますので、あわせてご覧ください。


  Llama2とは?使い方・日本語性能・商用利用について解説 | 初心者ガイド この記事では、Llama2について幅広く解説しています。Llama2の性能や安全性、商用利用、日本語対応、様々な環境での使い方などに触れています。 業界最安級GPUクラウド | GPUSOROBAN



MORE INFORMATION

GPUでお困りの方はGPUSOROBANで解決!
お気軽にご相談ください

10日間無料トライアル
詳しい資料はこちら
質問・相談はこちら