TensorRT-LLMの公式ドキュメントで、落とし穴が多すぎるため、解説を残しておきます。
TensorRTとは
深層学習の推論を高速、低メモリ容量でできるように最適化したソフトウェアです。訓練などの機能を削ぎ落とし、推論だけに特化したソフトウェアです。
TensorRT-LLMとは
TensorRTをLLM (Large Language Model)向けに、使いやすいようにしたパッケージです。既に訓練されたLLMをダウンロードすれば使えるように仕立ててあります。
TensorRT-LLMをセットアップすると何がいいのか
GeForce GPU (1080Ti以降?)を使ってLLMを回すことができます。
自宅のPCで最先端のLLMをいじることができます。
準備
今回は以下の環境を使いました。今日現在で全て最新版にアップデードしました。CUDAやDockerなどのインストール/アップデートの方法は各自調べてください。
環境
Ubuntu 22.04.4 LTS
GeForce RTX 4090
CUDA Version: 12.4
Docker 26.1.1
NVIDIA Container Toolkit 1.15.0
Hugging Face
Hugging Faceのアカウントを登録し、write権限のあるtokenを作成します。
今回使うモデルLlama-2-7b-chat-hfの利用権限を申請します。未申請ならFiles and versionsのタブで申請できます。承認されるとGitHubのようにファイル一覧が見えます。
セットアップ開始
まずは、公式のInstalling on Linuxに沿って全コマンドを実行していきます。このページに落とし穴はありませんでした。
調べればすぐ解決できる落とし穴が一つありましたが、一応書いておきます。
一番最後のコマンドgit lfs install
で、
git: 'lfs' is not a git command. See 'git --help'.
The most similar command is
log
のエラーになり、インストールできないかもしれません。その場合は以下の方法でインストールできます。
apt install curl
curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | bash
apt-get install git-lfs
git lfs install
落とし穴1
上記の公式instructionの全コマンド実行し終わる頃、あなたはDockerコンテナの中にいるはずです。
ここでコンテナを出てはいけません!
出るとコンテナが消えて上記の操作を再度繰り返すことになります。
もう一つターミナルを開いてこのコンテナをdocker imageとして保存(commit)します。
必ずrepositoryとtagを tensorrt_llm/release:latest
としてcommitしてください!
docker commit <コンテナ名> tensorrt_llm/release:latest
もし、別ターミナルが開けない場合は、Ctrl. + P -> Ctrl. + Q でコンテナを終了せずにディタッチしてdocker imageをコミットできます。
commitが完了したら、出来たdocker imageを確認してみましょう。
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
tensorrt_llm/release latest 6afa6e80a1e8 8 minutes ago 24.8GB
確認できたら、上のコンテナを終了して構いません。
さて、ここまで出来たら公式のQuick Start Guideに行きます。
-
指示通りHugging Faceのリポジトリをクローンします。(SSHは使わずHTTPSで)
git clone https://huggingface.co/meta-llama/Llama-2-7b-chat-hf
上で作成したアカウント名と書き込み権限のあるtokenを入力します。 -
TensorRT-LLMもう一度(今度はコンテナの外に)クローンします。
git clone https://github.com/NVIDIA/TensorRT-LLM.git
-
TensorRT-LLMのフォルダに入り、下記コマンドを実行します。
make -C docker release_run LOCAL_USER=1
この操作でdocker imageが作られ、自動的にコンテナが起動します。
落とし穴1でdocker imageの名前を正しく保存しないとここでエラーになります。 -
コンテナ内で下記コマンドを実行します。上に同じく書き込み権限のあるtokenを入力します。
huggingface-cli login --token *****
落とし穴2
ディレクトリが違います!
コンテナが起動し、最初にいるworkdirは/app/tensorrt_llm
はHugging Faceリポジトリとリンクしていません。Hugging Faceリポジトリとリンクしているのは/code/tensorrt_llm
です。
正しいディレクトリに移動します。
cd /code/tensorrt_llm/exammples/llama
4.あとは、公式の指示に従ってモデルをTensorRTLLMのフォーマットに変換します。
python3 convert_checkpoint.py --model_dir meta-llama/Llama-2-7b-chat-hf --output_dir llama-2-7b-ckpt
5.モデルをコンパイルします。
trtllm-build --checkpoint_dir llama-2-7b-ckpt \
--gemm_plugin float16 \
--output_dir ./llama-2-7b-engine
これで、セットアップが完了しました!
LLMを走らせてみよう
python3 ../run.py --engine_dir ./llama-2-7b-engine --max_output_len 100 --tokenizer_dir meta-llama/Llama-2-7b-chat-hf --input_text "How do I count to nine in French?"
出力結果👇🏻
Input [Text 0]: "<s> How do I count to nine in French?"
Output [Text 0 Beam 0]: "
In French, the numbers from 1 to 9 are:
1 - un
2 - deux
3 - trois
4 - quatre
5 - cinq
6 - six
7 - sept
8 - huit
9 - neuf
So, to count to nine in French, you would say:
un, deux, trois, quatre, cinq, six, sept, huit, neuf."