Japanese Stable CLIP を試してみた

StableCode を試してみた



Stable Diffusion などをリリースしている Stability AI から、コーディング用 LLM 生成 AI という StableCode がリリースされました。
RTX2070 を搭載した PC を購入しているので、ローカルで動くか試してみます。

1. Hugging Face のモデルをダウンロードする。

StableCode は、ベースモデル、インストラクションモデル、ロングコンテキストウインドウモデルの 3 種類があります。今回はインストラクションモデルを使用してみようと思っていますが、このモデルは Hugging Face にログインし、使用許諾に同意する必要があります。


また、モデルデータが数 GB の容量なので、都度ダウンロードするよりは、一回のダウンロードで済ませたいと考えました。そのため、コンテナ外でモデルのリポジトリをクローンしておきます。
(クローンするディレクトリはどこでも構いませんが、後ほど、コンテナ起動時にディレクトリ共有することを忘れないようにします)

  1. cd /work
  2. git lfs install
  3. git clone https://huggingface.co/stabilityai/stablecode-instruct-alpha-3b/
※ここで Hugging Face のユーザー情報を入力する必要があります。また、モデルデータをダウンロードするので、それなりに時間がかかります。また、lfs を有効にしておかないと、モデルデータがダウンロードできないようです

2. Docker イメージを起動する

CUDA の Docker イメージを使用し、--gpus で GPU を割り当てます。-v オプションで、先ほどリポジトリをクローンしたディレクトリを、コンテナ内と共有します。

  1. docker run -it --gpus=all --rm -v /work:/work nvidia/cuda:11.8.0-base-ubuntu22.04 /bin/bash

3. ライブラリインストール

コンテナ内で必要ライブラリをインストールします。
  1. apt update
  2. apt install python3-pip -y
  3. pip install torch torchvision torchaudio transformers

4. python コードを実行する 

例をもとに、以下のコードを作成しました。
  1. from transformers import AutoModelForCausalLM, AutoTokenizer
  2. tokenizer = AutoTokenizer.from_pretrained("stablecode/stablecode-instruct-alpha-3b")
  3. model = AutoModelForCausalLM.from_pretrained(
  4. "stablecode/stablecode-instruct-alpha-3b",
  5. trust_remote_code=True,
  6. torch_dtype="auto",
  7. )
  8. model.cuda()
  9. inputs =
  10. inputs = """
  11. ###Instruction
  12. Generate a python function to find number of CPU cores.
  13. ###Response
  14. """
  15. inputs = tokenizer(
  16. inputs, return_tensors="pt",
  17. return_token_type_ids=False,
  18. ).to("cuda")
  19. tokens = model.generate(
  20. **inputs,
  21. max_new_tokens=48,
  22. temperature=0.2,
  23. do_sample=True,
  24. )
  25. print(tokenizer.decode(tokens[0], skip_special_tokens=True))

※モデルデータを指定している2か所は、実際のディレクトリ構成に応じて修正が必要です。パスが違っているとダウンロードしたモデルが認識されず、エラーになるか Hugging Face からダウンロードしようとすると思います

5. 実行してみる

答えを出してくれています。RTX2070 でも実行できるようですね。

タスクマネージャーで見ても、GPU に負荷がかかっていることが確認できます。

6. 結果を確認してみる

StableCode が出力したコードで、確かに CPU のコア数が取得できることを確認できました。

コメント