4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Intel環境でLLMを動かす(GPU編)

Last updated at Posted at 2024-11-16

はじめに

 IntelのGPUを使ってLLMを動かす際の手順についてまとめました。NPU編は別項で扱います。

使用環境

  • AtomMan X7 Ti 185H
  • CPU: Intel Core Ultra9 processor 185H
  • GPU: Intel Arc Graphics
  • Memory: 96GB
  • OS: Ubuntu 24.04.1 LTS

手順

ドライバをインストールする

まず、Intelのサイトを参考にドライバをインストールします。

wget -qO - https://repositories.intel.com/gpu/intel-graphics.key | \
 sudo gpg --yes --dearmor --output /usr/share/keyrings/intel-graphics.gpg
echo "deb [arch=amd64,i386 signed-by=/usr/share/keyrings/intel-graphics.gpg] https://repositories.intel.com/gpu/ubuntu noble client" | \
 sudo tee /etc/apt/sources.list.d/intel-gpu-noble.list
sudo apt update

sudo apt-get install -y libze1 intel-level-zero-gpu intel-opencl-icd clinfo

pytorchで使う以下の2つも入れておきます。

sudo apt-get install -y libze-dev intel-ocloc

インストールされたか確認します。

clinfo | grep "Device Name"

以下のように表示されれば成功です。

Device Name                                     Intel(R) Arc(TM) Graphics
 Device Name                                   Intel(R) Arc(TM) Graphics
 Device Name                                   Intel(R) Arc(TM) Graphics
 Device Name                                   Intel(R) Arc(TM) Graphics

ついでに、Intel GPU Toolsを入れておきます。GPUの使用状況などを確認できます。

sudo apt-get install intel-gpu-tools

pytorchなどをインストールする

必要に応じて仮想環境を作成したうえで、以下のサイトを参考にpytorchをインストールします。

pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/test/xpu

xpuが有効かどうかをpythonで確認します。

import torch
torch.xpu.is_available()

'True'と出たので大丈夫なようです。

transformersとaccelerateとをインストールします。

pip install transformers accelerate

これで準備は終了です。

LLMを使ってみる

では実際に動かしてみましょう。例として、tanuki8Bを使ってみます。まず、比較としてGPUを使わないで動かしてみます。

import datetime
from transformers import AutoModelForCausalLM, AutoTokenizer, TextStreamer

st = datetime.datetime.now()
print("開始時刻", end=": ")
print(st)

model = AutoModelForCausalLM.from_pretrained("weblab-GENIAC/Tanuki-8B-dpo-v1.0", device_map="cpu", torch_dtype="auto")
tokenizer = AutoTokenizer.from_pretrained("weblab-GENIAC/Tanuki-8B-dpo-v1.0")
streamer = TextStreamer(tokenizer, skip_prompt=True, skip_special_tokens=True)

messages = [
    {"role": "system", "content": "以下は、タスクを説明する指示です。要求を適切に満たす応答を書きなさい。"},
    {"role": "user", "content": "たぬきに純粋理性批判は理解できますか?"}
]

input_ids = tokenizer.apply_chat_template(messages, add_generation_prompt=True, return_tensors="pt").to(model.device)
output_ids = model.generate(input_ids,
                            max_new_tokens=1024,
                            temperature=0.5,
                            streamer=streamer)

et = datetime.datetime.now()
print("終了時刻", end=": ")
print(et)

t = et - st
print("所要時間", end=": ")
print(t)

所要時間は以下のとおりでした。

所要時間: 0:53:49.054149

これは初回なのでモデルのダウンロードにかかる時間が含まれています。もう一度実行してみると、

所要時間: 0:25:15.120710

これがCPUでの実質的な所要時間です。

今度はGPUを使って走らせてみます。上のスクリプトの8行目device_map="cpu"device_map="xpu"に修正します。別ウインドウでsudo intex_gpu_topを走らせておくとGPUの使用状況がわかります。

所要時間: 0:05:20.790503

所要時間が1/5ほどになりました。だいぶ短くなりました。ただし、Mac Studio(初代・竹)で動かすと52秒程度で終わるので、それに比べるとだいぶ緩慢な気がします。

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?