๐Ÿ—จ๏ธ

FlexGen ใง opt-66b ใ‚’ๅ‹•ใ‹ใ™ใƒกใƒข

ใซๅ…ฌ้–‹

https://github.com/FMInference/FlexGen

ๅ‹•ไฝœ็’ฐๅขƒ(256 GB ๆŽจๅฅจ(X670 ใชใฉใง 48GB x 4 ใง 192 GB ใ‚‚ใ„ใ‘ใ‚‹ใ‹ใ‚‚ใฏใ—ใ‚Œใพใ›ใ‚“). 128 GB ใงใ‚‚ๅ‹•ใใ‘ใฉไบŒๅ€ใใ‚‰ใ„้…ใใชใ‚‹)ใŒใ‚ใ‚Œใฐ็‰นใซๅ•้กŒใชใๅ‹•ใใฎใงใ™ใŒ, ไธ€้ƒจ huggingface transformers(ใ‚„ใ‚„ใ“ใ—ใ„ๅๅ‰ใงใ‚ใ‚‹ใŒ, transformer ็ณป model ใ‚’ใบใ‚ใฃใจใƒ€ใ‚ฆใƒณใƒญใƒผใƒ‰ใ—ใŸใ‚Š่ชญใ‚€ใŸใ‚ใฎใƒฉใ‚คใƒ–ใƒฉใƒช) ใงใฎ(?)weight ใฎใƒ€ใ‚ฆใƒณใƒญใƒผใƒ‰ใซไธ้ƒฝๅˆใ‚ใ‚‹ใ‚ˆใ†ใงใ™.

ใจใ‚Šใพ่ฉฆใ™

ใจใ‚Šใพ chatbot ่ฉฆใ—ใพใ™!

  • x299 256 GB CPU mem
  • 3090 x 2(ๅฎŸ้š›ใฏไธ€ๅ€‹ใ ใ‘ไฝฟใ‚ใ‚Œใ‚‹)
$ python chatbot.py --model facebook/opt-66b --percent 50 10 100 0 100 0 --compress-weight

(ใกใชใฟใซๆœ€ๆ–ฐ FlexGen ใ ใจ chatbot.py ใ‚ตใƒณใƒ—ใƒซใŒๆถˆใ•ใ‚Œใฆใพใ™)

GPU ใฏ 20 GB, CPU ใฏ 25 GB ใใ‚‰ใ„ใฎใƒกใƒขใƒชๆถˆ่ฒป้‡ใงใ—ใŸ.

A chat between a curious human and a knowledgeable artificial intelligence assistant.                                                 
Human: Hello! What can you do?
Assistant: As an AI assistant, I can answer questions and chat with you.
Human: What is the name of the tallest mountain in the world?
Assistant: Everest.

ใ“ใ“ใงๆฑไบฌใจ NY ใฉใ‚Œใใ‚‰ใ„้ ใ„ใ‹่žใ„ใฆใฟใพใ™!

Human: How far from Tokyo to New York?
Assistant: About 10,000 kilometers.

ๆญฃ่งฃใฏ 10,850 km ใใ‚‰ใ„ใงใ™ใŒ, About ~ ใง็ญ”ใˆใฆใ„ใ‚‹ใฎใงใƒจใ‚ท!
ใใกใ‚“ใจ SI ๅ˜ไฝ็ณปใง็ญ”ใˆใฆใŠใ‚Šใ‚จใƒฉใ‚ค!

Human: ใšใ‚“ใ ใ‚‚ใ‚“ใฏใ‹ใ‚ใ„ใ„ใงใ™ใ‹๏ผŸ
Assistant: ใ†ใ‚“! ใšใ‚“ใ ใ‚‚ใ‚“ใฏใ‹ใ‚ใ„ใ„ใงใ™ใ‹๏ผŸ  

ๆ—ฅๆœฌ่ชžใฏใ ใ‚ใ ใ‚ใงใ—ใŸ...

่ฟ”็ญ”ใซใฏ 1 ๅˆ†ใใ‚‰ใ„ใ‹ใ‹ใ‚Šใพใ—ใŸ. FlexGen ใซใฏ opt-66b ใฎ benchmark ่จญๅฎšใฏใชใ„ใฎใงใ™ใŒ, opt-175b ใฎ benchmark ็ตๆžœใ‹ใ‚‰ๆƒณๅฎšใ™ใ‚‹ใซใ ใ„ใŸใ„ 1~2 token/sec ใใ‚‰ใ„ใชๆ„Ÿใ˜ใงใ—ใ‚‡ใ†ใ‹.
opt-66b ใฏ chatbot ใจใ—ใฆไฝฟใ†ใฎใฏ็พ็Šถ้›ฃใ—ใ„ใ‚ซใƒŠ.

ใƒกใƒขใƒชใ‚ใ‚‹ๅ ดๅˆใฎๆ”นๅ–„

--percent 0 100 100 0 100 0 --compress-weight

ใง, CPU ใƒกใƒขใƒช 64 GB, GPU 4 GB ใใ‚‰ใ„ใง่ฟ”็ญ”ๆ™‚้–“ใฏ 20 ็ง’ใใ‚‰ใ„ใซใชใ‚Šใพใ—ใŸ! GPU ใ‚ใ‚“ใพใ‚Šไฝฟใ‚ใ‚“ใปใ†ใŒๆ€ง่ƒฝใงใ‚‹...
(--compress-weight ใชใ—ใฏใƒกใƒขใƒชไธ่ถณใงใ—ใŸ(ๆญฃ็ขบใซใฏ้ ‘ๅผตใฃใฆๅ‹•ใ‹ใใ†ใจ kernel ใŒใƒกใƒขใƒชๅœง็ธฎใจใ‹ใ—ใฆใ„ใคใพใงใ‚‚ๅˆๆœŸๅŒ–ใŒ็ต‚ใ‚ใ‚‰ใชใ„. 384 GB ใจใ‹ใชใ‚‰ๅ‹•ใใใ†ใงใ™)

ใงใ‚‚

Human: How far from Tokyo to New York?                                                Assistant: About 12,000 miles.

ใจใƒžใ‚คใƒซๆ›็ฎ—ใง็ญ”ใˆใฆใƒกใƒƒ!(ใ—ใ‹ใ‚‚่ท้›ข้–“้•ใฃใฆใ„ใ‚‹), ใจใชใ‚Šใพใ—ใŸ.

ใŸใ ่ฟ”็ญ” 20 ็ง’ใ‚‚ chatbot ็”จ้€”ใงใฏใกใ‚‡ใฃใจใใณใ—ใ„ใ‚ซใƒŠ.
opt-30b (benchmark 7 token/sec) ใ ใจ 5~10 ็ง’ใใ‚‰ใ„ใง, ใชใ‚“ใจใ‹่จฑๅฎนใงใใ‚‹ๆ„Ÿใ˜.
opt-6.7b ใฏ 2~3 ็ง’ใง่ฟ”ใฃใฆใใฆใƒใƒฃใƒƒใƒˆๆ„Ÿใ‚ใ‚Šใพใ—ใŸ.

opt-6b or opt-30b ใงใพใšใฏใƒใƒฃใƒƒใƒˆใ—ใฆ, ใใ‚Œใงใ‚‚ใƒฆใƒผใ‚ถใƒผใŒๆบ€่ถณใ—ใชใ‹ใฃใŸใ‚‰, ่ฒฌไปป่€…ใจใ—ใฆ opt-66b ๅ‡บใ—ใฆๅ•ใ„ๅˆใ‚ใ›ใ—ใฆใ‚‚ใ‚‰ใ†ๆ„Ÿใ˜ใง้‹็”จใŒใ„ใ„ใงใ—ใ‚‡ใ†ใ‹...

ใ‚ใจใฏ, LLaMa ใ‚ใŸใ‚Šใ‚„ GPT-neox ็ณปใซๆœŸๅพ…ใงใ™ใ‹ใญ.

ใกใชใฟใซ opt-30b ใ‚‚ใƒžใ‚คใƒซใง่ฟ”็ญ”ใ—, ใพใŸ่ท้›ข้–“้•ใฃใฆใ„ใŸ..

https://twitter.com/syoyo/status/1629917508005400576?s=20

opt-66b benchmark

FlexGen repo ใซใฏ opt-66b ใฎ benchmark ใฏ็„กใ„ใฎใงใ™ใŒ, opt-30b ใจ opt-175b ใฎ่จญๅฎšใ‚’ๅ‚่€ƒใซใ‚„ใฃใฆใฟใพใ—ใŸ. 1x1(1 node, single GPU)ใงใฎ็ตๆžœใงใ™. compress ๆœ‰ๅŠนใซใ—ใฆใ„ใพใ™.

python -m flexgen.flex_opt --model facebook/opt-66b --path _DUMMY_ --percent 0 100 0 100 0 100 --gpu-batch-size 32 --num-gpu-batches 3
 --debug fewer_batch --compress-cache
model size: 122.375 GB, cache size: 114.750 GB, hidden size (prefill): 0.896 GB
init weight...
warmup - generate
benchmark - generate
100%|โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ| 20/20 [0
2:19<00:00,  6.96s/it]
/home/syoyo/miniconda3/envs/flexgen/lib/python3.8/site-packages/torch/distributed/distributed_c10d.py:262: UserWarning: torch.distribu
ted.reduce_op is deprecated, please use torch.distributed.ReduceOp instead
  warnings.warn(
TorchDevice: cuda:0
  cur_mem: 1.2672 GB,  peak_mem: 6.1617 GB
TorchDevice: cpu
  cur_mem: 123.2760 GB,  peak_mem: 0.0000 GB
model size: 122.375 GB  cache size: 114.750 GB  hidden size (p): 0.896 GB
peak gpu mem: 6.162 GB  projected: True
prefill latency: 136.627 s      prefill throughput: 359.753 token/s
decode latency: 511.038 s       decode throughput: 5.823 token/s
total latency: 647.665 s        total throughput: 4.743 token/s
python -m flexgen.flex_opt --model facebook/opt-66b --path _DUMMY_ --percent 0 100 0 100 0 100 --gpu-batch-size 12 --num-gpu-batches 4 --debug fewer_batch --compress-cache --prompt-len 1024
model size: 122.375 GB, cache size: 111.375 GB, hidden size (prefill): 0.870 GB
init weight...
warmup - generate
benchmark - generate
100%|โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ| 20/20 [02:21<00:00,  7.09s/it]
/home/syoyo/miniconda3/envs/flexgen/lib/python3.8/site-packages/torch/distributed/distributed_c10d.py:262: UserWarning: torch.distributed.reduce_op is deprecated, please use torch.distributed.ReduceOp instead
  warnings.warn(
TorchDevice: cuda:0
  cur_mem: 1.2663 GB,  peak_mem: 6.7893 GB
TorchDevice: cpu
  cur_mem: 123.2759 GB,  peak_mem: 0.0000 GB
model size: 122.375 GB  cache size: 111.375 GB  hidden size (p): 0.870 GB
peak gpu mem: 6.789 GB  projected: True
prefill latency: 139.272 s      prefill throughput: 352.921 token/s
decode latency: 501.070 s       decode throughput: 2.970 token/s
total latency: 640.342 s        total throughput: 2.399 token/s

CPU 123 GB ใใ‚‰ใ„ไฝฟใ„, 4.7 tokens/s ใงใ—ใŸ. opt-30b ใŒ 7~8 tokens/sec, opt-175b ใŒ 1 tokens/sec ใงใ™ใ‹ใ‚‰ๆ„ๅค–ใจใ„ใ„ใ‹ใ‚“ใ˜ใงใ—ใ‚‡ใ†ใ‹.

ใŸใ ใƒใƒƒใƒใ‚ตใ‚คใ‚บ็ญ‰ๅข—ใ‚„ใ—ใฆใ‚นใƒซใƒผใƒ—ใƒƒใƒˆไธŠใ’ใฆใฎ็ตๆžœใ ใจๆ€ใ„ใพใ™ใฎใง, ใ„ใ‚ใ„ใ‚่จญๅฎšใ„ใ˜ใฃใฆใƒฌใ‚คใƒ†ใƒณใ‚ท้‡่ฆ–ใซใ—ใฆใ‚‚ chatbot ็”จ้€”ๅ‘ใ‘ใซใƒฌใ‚คใƒ†ใƒณใ‚ท็Ÿญ็ธฎใฏใ‚€ใ‚Šใฃใฝใใ†ใชๆฐ—ใ‚‚ใ—ใพใ™.

ใƒขใƒ‡ใƒซใƒ€ใ‚ฆใƒณใƒญใƒผใƒ‰ใฎไธ้ƒฝๅˆ

FlexGen ใงใฏ, huggingface ใง่ฝใจใ—ใŸใƒขใƒ‡ใƒซใƒ‡ใƒผใ‚ฟใซๅค‰ๆ›ใ‚’ใ‹ใ‘ใพใ™.
ใ—ใŸใŒใฃใฆ, ๅ…ƒใจใชใ‚‹ huggingface ใฎ cache(~/.cache/huggingface/hub/)ใŒๅฃŠใ‚Œใฆใ„ใ‚‹ใจใ†ใพใใ„ใใพใ›ใ‚“.

(ใ‚ใจ, opt-66b ใ ใจ 14 ๅ€‹ใ‚ใ‚‹ weight ใƒ•ใ‚กใ‚คใƒซใฎใ†ใก, ๆœ€ๅพŒใฎ 1 ๅ€‹ใŒ FlexGen ็ตŒ็”ฑใฎใƒ€ใ‚ฆใƒณใƒญใƒผใƒ‰ใงใฏๆฌ ใ‘ใ‚‹ใฃใฝใ„?)

huggingface ใฎใƒฉใ‚คใƒ–ใƒฉใƒชใงใฏ SHA ใƒใƒƒใ‚ทใƒฅใชใฉใงใƒ•ใ‚กใ‚คใƒซใŒๅฃŠใ‚Œใฆใ„ใชใ„ใ‹ใชใฉใฎใƒใ‚งใƒƒใ‚ฏใฏใ—ใฆใใ‚Œใชใ„ใ‚ˆใ†ใงใ™...

ใพใŸ, ใƒ•ใ‚กใ‚คใƒซ่‡ชไฝ“ใฏไฝ•ใ‚‰ใ‹ใฎใƒใƒƒใ‚ทใƒฅใ‚’ๅ–ใฃใฆ blob ใซไฟๅญ˜ใชใฎใง, ใƒ•ใ‚กใ‚คใƒซๅใฟใŸใ ใ‘ใงใฏใ‚ใ‹ใ‚Šใพใ›ใ‚“.

ๅ…ƒใƒ•ใ‚กใ‚คใƒซๅใฏ

~/.cache/huggingface/hub/models--facebook--opt-66b/snapshots/7259969061237fe940036d22bea0fd349e4485e9

ใฎใ‚ˆใ†ใซ snapshots ใซใ‚ใ‚Šใพใ™(ใ•ใ‚‰ใซไธ€ๆฎตไฝ•ใ‹ใ—ใ‚‰ใฎใƒใƒƒใ‚ทใƒฅใ‚’ๅ–ใฃใฆใƒ•ใ‚ฉใƒซใƒ€ไฝœใฃใฆใŠใ‚Šใ‚„ใ‚„ใ“ใ—ใ„)

ใ“ใ“ใ‹ใ‚‰ blob ใธใฎใ‚ทใƒณใƒœใƒชใƒƒใ‚ฏใƒชใƒณใ‚ฏใฎๅฝขใงใƒ•ใ‚กใ‚คใƒซใŒใ‚ใ‚Šใพใ™ใฎใง, ใƒ€ใ‚ฆใƒณใƒญใƒผใƒ‰ๅคฑๆ•—ใ—ใŸใฎใฏใ“ใฎ symlink ใจ blob ใฎไธกๆ–นใฎใƒ•ใ‚กใ‚คใƒซใ‚’ๆถˆใ—ใฆๅ†ๅบฆใƒ€ใ‚ฆใƒณใƒญใƒผใƒ‰ใ—ใพใ™.
(ใƒ€ใ‚ฆใƒณใƒญใƒผใƒ‰ใ—ใŸใƒ•ใ‚กใ‚คใƒซๅใฏใชใซใ‹ๅˆฅ้€” DB ใง็ฎก็†ใ—ใฆใ„ใ‚‹ใ‚ˆใ†ใงใฏใชใ„ใฎใง, ๅ˜ใซไธ้ƒฝๅˆใฎใ‚ใ‚‹ใƒ•ใ‚กใ‚คใƒซใ‚’ๆถˆใ›ใฐ OK ใ ใฃใŸ)

ใƒขใƒ‡ใƒซใฎใƒ€ใ‚ฆใƒณใƒญใƒผใƒ‰่‡ชไฝ“ใฏ, transformers ไฝฟใฃใŸ็ฐกๅ˜ใชใ‚นใ‚ฏใƒชใƒ—ใƒˆใ‹ใ„ใฆ,

from transformers import AutoModelForCausalLM, AutoTokenizer
model = AutoModelForCausalLM.from_pretrained("facebook/opt-66b", torch_dtype=torch.float16).cuda()

ใ‚ใŸใ‚Šใชๆ„Ÿใ˜ใง.

opt-175b ใฏ?

ไธ€ๅฟœ CPU mem 256 GB ใ‚ใ‚Œใฐๅ‹•ใใใ†ใงใ™ใŒ, opt-175b ใฏ่ฝใจใ™ใฎใซใƒชใ‚ฏใ‚จใ‚นใƒˆใŒๅฟ…่ฆใงใ™.
้‹ใ‚ˆใ่จฑๅฏใ•ใ‚Œใ‚Œใฐ่ฉฆใ—ใฆใฟใŸใ„ใจใ“ใ‚.

Discussion