LoginSignup
1
0

Fugaku-LLMをCPUパソコンで動かしてみた ~CPUでもFugaku-LLMは動くのか!?~

Posted at

GPUでは動くことはわかってるFugaku-LLM。
自宅のCPUパソコンで動くのか試してみました。

結果

Fugaku-LLMはCPUパソコンでも動くが遅い。

実行環境

PCスペック

・CPU:Intel Core i5-13500
・メモリ:32GB(DDR4-3200×2枚)
・SSD:NVMe 1TB
・その他:
 ・GPUなしの普通のデスクトップです。詳しくは後日書くかも。

OSなど

・OS:Ubuntu 22.04 LTS Desktop
・今回は仮想化やコンテナは利用していません。

実行コード

import datetime
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer

dt = datetime.datetime.now()
start = 'start: '+str(dt)
print(start)

model_path = "Fugaku-LLM/Fugaku-LLM-13B-instruct"
dt = datetime.datetime.now()
str1 = 'after_model_path: '+str(dt)
print(str1)


tokenizer = AutoTokenizer.from_pretrained(model_path)
dt = datetime.datetime.now()
str1 = 'after_tokenizer: '+str(dt)
print(str1)


model = AutoModelForCausalLM.from_pretrained(model_path, torch_dtype=torch.bfloat16, device_map="auto")
dt = datetime.datetime.now()
str1 = 'after_model: '+str(dt)
print(str1)


model.eval()
dt = datetime.datetime.now()
str1 = 'after_model.eval(): '+str(dt)
print(str1)


system_example = "以下は、タスクを説明する指示です。要求を適切に満たす応答を書きなさい。"
instruction_example = "スーパーコンピュータ「富岳」の名前の由来を教えてください。"

prompt = f"{system_example}\n\n### 指示:\n{instruction_example}\n\n### 応答:\n"

input_ids = tokenizer.encode(prompt,
                             add_special_tokens=False,
                             return_tensors="pt")
dt = datetime.datetime.now()
str1 = 'after_input_ids: '+str(dt)
print(str1)

tokens = model.generate(
    input_ids.to(device=model.device),
    max_new_tokens=128,
    do_sample=True,
    temperature=0.1,
    top_p=1.0,
    repetition_penalty=1.0,
    top_k=0
)
dt = datetime.datetime.now()
str1 = 'after_tokens: '+str(dt)
print(str1)


out = tokenizer.decode(tokens[0], skip_special_tokens=True)
dt = datetime.datetime.now()
str1 = 'after_out: '+str(dt)
print(str1)
print(out)

その他

・コードの各所にprint文入れて各所の実行時間をはかりました。
・2回目以降実行のため、
 LLMモデルはローカルから読み込んでいます。

実行結果

実行ログ

start: 2024-05-19 14:25:58.486359
after_model_path: 2024-05-19 14:25:58.486378
after_tokenizer: 2024-05-19 14:25:58.829314
Loading checkpoint shards:  50%|████████▌        | 3/6 [00:00<00:00, 2Loading checkpoint shards: 100%|█████████████████| 6/6 [00:00<Loading checkpoint shards: 100%|█████████████████| 6/6 [00:00<00:00, 23.82it/s]
after_model: 2024-05-19 14:26:00.501484
after_model.eval(): 2024-05-19 14:26:00.503511
after_input_ids: 2024-05-19 14:26:00.506017
after_tokens: 2024-05-19 15:53:20.935008
after_out: 2024-05-19 15:53:20.935205
以下は、タスクを説明する指示です。要求を適切に満たす応答を書 きなさい。

### 指示:
スーパーコンピュータ「富岳」の名前の由来を教えてください。

### 応答:
「富岳」は日本のスーパーコンピュータの名前で、富士山の異名でもあります。この名前は、スーパーコンピュータが日本の研究と革新の象徴である富士山にちなんだもので、世界最高性能のコンピュータになることを目指すという決意を示すものです。

結果

・1回の実行に30分以上かかりました💦
・ColabのT4インスタンスでの実行は数分だったため、
 想像以上にやばい結果となりました。

考察とこれから

・流石に1回の実行に30分はかかり過ぎという体感があったため、
 少し原因調査しました。

仮説1:メモリ不足

Fugaku-LLMは実行に
26~30GB程度のメモリを利用すると言われています。
今回のPCには全体で32GBしかメモリを積んでいなかったため、
SSDへのスワップが発生していたのではないかと考えました。

スクショ

実行終了直前のtopの結果はこんな感じ。
スクリーンショット 2024-05-19 151547.png

個人的な見解

topを見ていた感じだと、
スワップそんなに発生していないのではないか?
と思います。
ただ、ガベージコレクションはガリガリしていました。
→後日メモリ増やして計測してみます。

仮説2:CPUをうまく使えていない

topを見ると、CPU使用率が100%~120%で全然伸びていませんでした。

スクショ

実行中のtop1のスクショはこんな感じ。
スクリーンショット 2024-05-19 151600.png

個人的な見解

マルチコアが全然使えておらずコアが遊びまくっています。
今回遅かった主原因はこれな気がします。
→後日マルチコア対応できるかどうか試してみます。

感想と今後の方針

でも、32GBメモリのCPU環境で
とりあえず最後まで実行できたことにはびっくりしました。
…正直、エラーで止まると思ってた(笑)

ただ、現在の速度では使い物にならないので、
・メモリ増強
・マルチコア対応
・GPU利用
の3方向で、
使い物になる実効速度に挑戦していきたいと思います。

最後に広告

本業の方の広告になってしまうのですが、
会社関係で「メタバース・デジタルツイン講座」やってます。
メタバース・デジタルツインに興味のある人はぜひよろしくお願いします。
68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3135343935342f30363931353939332d313534382d323234642d373830322d3664363763333330306431662e706e67.png

1
0
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
1
0