huggingface--transformers
e06fe8e8c6
Secret Leaks / trufflehog (push) Failing after 1s
Build documentation / build (push) Failing after 1s
Build documentation / build_other_lang (push) Failing after 0s
CodeQL Security Analysis / CodeQL Analysis (push) Failing after 0s
PR CI / pr-ci (push) Failing after 1s
Slow tests on important models (on Push - A10) / Get all modified files (push) Failing after 1s
Slow tests on important models (on Push - A10) / Model CI (push) Has been skipped
Self-hosted runner (benchmark) / Benchmark (aws-g5-4xlarge-cache) (push) Has been cancelled
New model PR merged notification / Notify new model (push) Has been cancelled
Update Transformers metadata / build_and_package (push) Has been cancelled
306 ่ก
19 KiB
Markdown
306 ่ก
19 KiB
Markdown
<!--Copyright 2024 The HuggingFace Team. All rights reserved.
|
|
|
|
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
|
|
the License. You may obtain a copy of the License at
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
|
|
an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
|
|
specific language governing permissions and limitations under the License.
|
|
|
|
โ ๏ธ Note that this file is in Markdown but contain specific syntax for our doc-builder (similar to MDX) that may not be
|
|
rendered properly in your Markdown viewer.
|
|
|
|
-->
|
|
|
|
# Transformers๋ก ์ฑํ
ํ๊ธฐ[[chatting-with-transformers]]
|
|
|
|
์ด ๊ธ์ ๋ณด๊ณ ์๋ค๋ฉด **์ฑํ
๋ชจ๋ธ**์ ๋ํด ์ด๋ ์ ๋ ์๊ณ ๊ณ์ค ๊ฒ์
๋๋ค.
|
|
์ฑํ
๋ชจ๋ธ์ด๋ ๋ฉ์ธ์ง๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์ ์๋ ๋ํํ ์ธ๊ณต์ง๋ฅ์
๋๋ค.
|
|
๋ํ์ ์ผ๋ก ChatGPT๊ฐ ์๊ณ , ์ด์ ๋น์ทํ๊ฑฐ๋ ๋ ๋ฐ์ด๋ ์คํ์์ค ์ฑํ
๋ชจ๋ธ์ด ๋ง์ด ์กด์ฌํฉ๋๋ค.
|
|
์ด๋ฌํ ๋ชจ๋ธ๋ค์ ๋ฌด๋ฃ ๋ค์ด๋ก๋ํ ์ ์์ผ๋ฉฐ, ๋ก์ปฌ์์ ์คํํ ์ ์์ต๋๋ค.
|
|
ํฌ๊ณ ๋ฌด๊ฑฐ์ด ๋ชจ๋ธ์ ๊ณ ์ฑ๋ฅ ํ๋์จ์ด์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ์ํ์ง๋ง,
|
|
์ ์ฌ์ GPU ํน์ ์ผ๋ฐ ๋ฐ์คํฌํ์ด๋ ๋
ธํธ๋ถ CPU์์๋ ์ ์๋ํ๋ ์ํ ๋ชจ๋ธ๋ค๋ ์์ต๋๋ค.
|
|
|
|
์ด ๊ฐ์ด๋๋ ์ฑํ
๋ชจ๋ธ์ ์ฒ์ ์ฌ์ฉํ๋ ๋ถ๋ค์๊ฒ ์ ์ฉํ ๊ฒ์
๋๋ค.
|
|
์ฐ๋ฆฌ๋ ๊ฐํธํ ๊ณ ์์ค(High-Level) "pipeline"์ ํตํด ๋น ๋ฅธ ์์ ๊ฐ์ด๋๋ฅผ ์งํํ ๊ฒ์
๋๋ค.
|
|
๊ฐ์ด๋์๋ ์ฑํ
๋ชจ๋ธ์ ๋ฐ๋ก ์์ํ ๋ ํ์ํ ๋ชจ๋ ์ ๋ณด๊ฐ ๋ด๊ฒจ ์์ต๋๋ค.
|
|
๋น ๋ฅธ ์์ ๊ฐ์ด๋ ์ดํ์๋ ์ฑํ
๋ชจ๋ธ์ด ์ ํํ ๋ฌด์์ธ์ง, ์ ์ ํ ๋ชจ๋ธ์ ์ ํํ๋ ๋ฐฉ๋ฒ๊ณผ,
|
|
์ฑํ
๋ชจ๋ธ์ ์ฌ์ฉํ๋ ๊ฐ ๋จ๊ณ์ ์ ์์ค(Low-Level) ๋ถ์ ๋ฑ ๋ ์์ธํ ์ ๋ณด๋ฅผ ๋ค๋ฃฐ ๊ฒ์
๋๋ค.
|
|
๋ํ ์ฑํ
๋ชจ๋ธ์ ์ฑ๋ฅ๊ณผ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ ์ต์ ํํ๋ ๋ฐฉ๋ฒ์ ๋ํ ํ๋ ์ ๊ณตํ ๊ฒ์
๋๋ค.
|
|
|
|
|
|
## ๋น ๋ฅธ ์์[[quickstart]]
|
|
|
|
์์ธํ ๋ณผ ์ฌ์ ๊ฐ ์๋ ๋ถ๋ค์ ์ํด ๊ฐ๋จํ ์์ฝํด ๋ณด๊ฒ ์ต๋๋ค:
|
|
์ฑํ
๋ชจ๋ธ์ ๋ํ ๋ฉ์ธ์ง๋ฅผ ๊ณ์ํด์ ์์ฑํด ๋๊ฐ๋๋ค.
|
|
์ฆ, ์งค๋งํ ์ฑํ
๋ฉ์ธ์ง๋ฅผ ๋ชจ๋ธ์๊ฒ ์ ๋ฌํ๋ฉด, ๋ชจ๋ธ์ ์ด๋ฅผ ๋ฐํ์ผ๋ก ์๋ต์ ์ถ๊ฐํ๋ฉฐ ๋ํ๋ฅผ ์ด์ด ๋๊ฐ๋๋ค.
|
|
์ด์ ์ค์ ๋ก ์ด๋ป๊ฒ ์๋ํ๋์ง ์ดํด๋ณด๊ฒ ์ต๋๋ค.
|
|
๋จผ์ , ์ฑํ
์ ๋ง๋ค์ด ๋ณด๊ฒ ์ต๋๋ค:
|
|
|
|
|
|
```python
|
|
chat = [
|
|
{"role": "system", "content": "You are a sassy, wise-cracking robot as imagined by Hollywood circa 1986."},
|
|
{"role": "user", "content": "Hey, can you tell me any fun things to do in New York?"}
|
|
]
|
|
```
|
|
|
|
์ฃผ๋ชฉํ์ธ์, ๋ํ๋ฅผ ์ฒ์ ์์ํ ๋ ์ ์ ๋ฉ์ธ์ง ์ด์ธ์๋, ๋ณ๋์ **์์คํ
** ๋ฉ์ธ์ง๊ฐ ํ์ํ ์ ์์ต๋๋ค.
|
|
๋ชจ๋ ์ฑํ
๋ชจ๋ธ์ด ์์คํ
๋ฉ์ธ์ง๋ฅผ ์ง์ํ๋ ๊ฒ์ ์๋์ง๋ง,
|
|
์ง์ํ๋ ๊ฒฝ์ฐ์๋ ์์คํ
๋ฉ์ธ์ง๋ ๋ํ์์ ๋ชจ๋ธ์ด ์ด๋ป๊ฒ ํ๋ํด์ผ ํ๋์ง๋ฅผ ์ง์ํ ์ ์์ต๋๋ค.
|
|
์๋ฅผ ๋ค์ด, ์ ์พํ๊ฑฐ๋ ์ง์งํ๊ณ ์ ํ ๋, ์งง์ ๋ต๋ณ์ด๋ ๊ธด ๋ต๋ณ์ ์ํ ๋ ๋ฑ์ ์ค์ ํ ์ ์์ต๋๋ค.
|
|
์์คํ
๋ฉ์ธ์ง๋ฅผ ์๋ตํ๊ณ
|
|
"You are a helpful and intelligent AI assistant who responds to user queries."
|
|
์ ๊ฐ์ ๊ฐ๋จํ ํ๋กฌํํธ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ๋ ๊ฐ๋ฅํฉ๋๋ค.
|
|
|
|
์ฑํ
์ ์์ํ๋ค๋ฉด ๋ํ๋ฅผ ์ด์ด ๋๊ฐ๋ ๊ฐ์ฅ ๋น ๋ฅธ ๋ฐฉ๋ฒ์ [`TextGenerationPipeline`]๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์
๋๋ค.
|
|
ํ๋ฒ `LLaMA-3`๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฅผ ์์ฐํด ๋ณด๊ฒ ์ต๋๋ค.
|
|
์ฐ์ `LLaMA-3`๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ์น์ธ์ด ํ์ํฉ๋๋ค. [๊ถํ ์ ์ฒญ](https://huggingface.co/meta-llama/Meta-Llama-3-8B-Instruct)์ ํ๊ณ Hugging Face ๊ณ์ ์ผ๋ก ๋ก๊ทธ์ธํ ํ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
|
|
๋ํ ์ฐ๋ฆฌ๋ `device_map="auto"`๋ฅผ ์ฌ์ฉํฉ๋๋ค. GPU ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ถฉ๋ถํ๋ค๋ฉด ๋ก๋๋ ๊ฒ์
๋๋ค.
|
|
๊ทธ๋ฆฌ๊ณ ๋ฉ๋ชจ๋ฆฌ ์ ์ฝ์ ์ํด dtype์ `torch.bfloat16`์ผ๋ก ์ค์ ํ ๊ฒ์
๋๋ค.
|
|
|
|
```python
|
|
import torch
|
|
from transformers import pipeline
|
|
|
|
pipe = pipeline("text-generation", "meta-llama/Meta-Llama-3-8B-Instruct", dtype=torch.bfloat16, device_map="auto")
|
|
response = pipe(chat, max_new_tokens=512)
|
|
print(response[0]['generated_text'][-1]['content'])
|
|
```
|
|
|
|
์ดํ ์คํ์ ํ๋ฉด ์๋์ ๊ฐ์ด ์ถ๋ ฅ๋ฉ๋๋ค:
|
|
|
|
```text
|
|
(sigh) Oh boy, you're asking me for advice? You're gonna need a map, pal! Alright,
|
|
alright, I'll give you the lowdown. But don't say I didn't warn you, I'm a robot, not a tour guide!
|
|
|
|
So, you wanna know what's fun to do in the Big Apple? Well, let me tell you, there's a million
|
|
things to do, but I'll give you the highlights. First off, you gotta see the sights: the Statue of
|
|
Liberty, Central Park, Times Square... you know, the usual tourist traps. But if you're lookin' for
|
|
something a little more... unusual, I'd recommend checkin' out the Museum of Modern Art. It's got
|
|
some wild stuff, like that Warhol guy's soup cans and all that jazz.
|
|
|
|
And if you're feelin' adventurous, take a walk across the Brooklyn Bridge. Just watch out for
|
|
those pesky pigeons, they're like little feathered thieves! (laughs) Get it? Thieves? Ah, never mind.
|
|
|
|
Now, if you're lookin' for some serious fun, hit up the comedy clubs in Greenwich Village. You might
|
|
even catch a glimpse of some up-and-coming comedians... or a bunch of wannabes tryin' to make it big. (winks)
|
|
|
|
And finally, if you're feelin' like a real New Yorker, grab a slice of pizza from one of the many amazing
|
|
pizzerias around the city. Just don't try to order a "robot-sized" slice, trust me, it won't end well. (laughs)
|
|
|
|
So, there you have it, pal! That's my expert advice on what to do in New York. Now, if you'll
|
|
excuse me, I've got some oil changes to attend to. (winks)
|
|
```
|
|
|
|
์ฑํ
์ ๊ณ์ํ๋ ค๋ฉด, ์์ ์ ๋ต์ฅ์ ์ถ๊ฐํ๋ฉด ๋ฉ๋๋ค.
|
|
ํ์ดํ๋ผ์ธ์์ ๋ฐํ๋ `response` ๊ฐ์ฒด์๋ ํ์ฌ๊น์ง ๋ชจ๋ ์ฑํ
์ ํฌํจํ๊ณ ์์ผ๋ฏ๋ก
|
|
๋ฉ์ธ์ง๋ฅผ ์ถ๊ฐํ๊ณ ๋ค์ ์ ๋ฌํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค.
|
|
|
|
```python
|
|
chat = response[0]['generated_text']
|
|
chat.append(
|
|
{"role": "user", "content": "Wait, what's so wild about soup cans?"}
|
|
)
|
|
response = pipe(chat, max_new_tokens=512)
|
|
print(response[0]['generated_text'][-1]['content'])
|
|
```
|
|
|
|
์ดํ ์คํ์ ํ๋ฉด ์๋์ ๊ฐ์ด ์ถ๋ ฅ๋ฉ๋๋ค:
|
|
|
|
```text
|
|
(laughs) Oh, you're killin' me, pal! You don't get it, do you? Warhol's soup cans are like, art, man!
|
|
It's like, he took something totally mundane, like a can of soup, and turned it into a masterpiece. It's
|
|
like, "Hey, look at me, I'm a can of soup, but I'm also a work of art!"
|
|
(sarcastically) Oh, yeah, real original, Andy.
|
|
|
|
But, you know, back in the '60s, it was like, a big deal. People were all about challenging the
|
|
status quo, and Warhol was like, the king of that. He took the ordinary and made it extraordinary.
|
|
And, let me tell you, it was like, a real game-changer. I mean, who would've thought that a can of soup could be art? (laughs)
|
|
|
|
But, hey, you're not alone, pal. I mean, I'm a robot, and even I don't get it. (winks)
|
|
But, hey, that's what makes art, art, right? (laughs)
|
|
```
|
|
|
|
์ด ํํ ๋ฆฌ์ผ์ ํ๋ฐ๋ถ์์๋ ์ฑ๋ฅ๊ณผ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ,
|
|
๊ทธ๋ฆฌ๊ณ ์ฌ์ฉ์์ ํ์์ ๋ง๋ ์ฑํ
๋ชจ๋ธ ์ ํ๊ณผ ๊ฐ์ ๊ตฌ์ฒด์ ์ธ ์ฃผ์ ๋ค์ ๋ค๋ฃฐ ๊ฒ์
๋๋ค.
|
|
|
|
## ์ฑํ
๋ชจ๋ธ ๊ณ ๋ฅด๊ธฐ[[choosing-a-chat-model]]
|
|
|
|
[Hugging Face Hub](https://huggingface.co/models?pipeline_tag=text-generation&sort=trending)๋ ์ฑํ
๋ชจ๋ธ์ ๋ค์ํ๊ฒ ์ ๊ณตํ๊ณ ์์ต๋๋ค.
|
|
์ฒ์ ์ฌ์ฉํ๋ ์ฌ๋์๊ฒ๋ ๋ชจ๋ธ์ ์ ํํ๊ธฐ๊ฐ ์ด๋ ค์ธ์ง ๋ชจ๋ฆ
๋๋ค.
|
|
ํ์ง๋ง ๊ฑฑ์ ํ์ง ๋ง์ธ์! ๋ ๊ฐ์ง๋ง ๋ช
์ฌํ๋ฉด ๋ฉ๋๋ค:
|
|
|
|
- ๋ชจ๋ธ์ ํฌ๊ธฐ๋ ์คํ ์๋์ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ์ฌ ์ ์๋์ง ์ฌ๋ถ๋ฅผ ๊ฒฐ์ .
|
|
- ๋ชจ๋ธ์ด ์์ฑํ ์ถ๋ ฅ์ ํ์ง.
|
|
|
|
์ผ๋ฐ์ ์ผ๋ก ์ด๋ฌํ ์์๋ค์ ์๊ด๊ด๊ณ๊ฐ ์์ต๋๋ค. ๋ ํฐ ๋ชจ๋ธ์ผ์๋ก ๋ ๋ฐ์ด๋ ์ฑ๋ฅ์ ๋ณด์ด๋ ๊ฒฝํฅ์ด ์์ง๋ง, ๋์ผํ ํฌ๊ธฐ์ ๋ชจ๋ธ์ด๋ผ๋ ์ ์๋ฏธํ ์ฐจ์ด๊ฐ ๋ ์ ์์ต๋๋ค!
|
|
|
|
### ๋ชจ๋ธ์ ๋ช
์นญ๊ณผ ํฌ๊ธฐ[[size-and-model-naming]]
|
|
|
|
๋ชจ๋ธ์ ํฌ๊ธฐ๋ ๋ชจ๋ธ ์ด๋ฆ์ ์๋ ์ซ์๋ก ์ฝ๊ฒ ์ ์ ์์ต๋๋ค.
|
|
์๋ฅผ ๋ค์ด, "8B" ๋๋ "70B"์ ๊ฐ์ ์ซ์๋ ๋ชจ๋ธ์ **ํ๋ผ๋ฏธํฐ** ์๋ฅผ ๋ํ๋
๋๋ค.
|
|
์์ํ๋ ๊ฒฝ์ฐ๊ฐ ์๋๋ผ๋ฉด, ํ๋ผ๋ฏธํฐ ํ๋๋น ์ฝ 2๋ฐ์ดํธ์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ์ํ๋ค๊ณ ์์ ๊ฐ๋ฅํฉ๋๋ค.
|
|
๋ฐ๋ผ์ 80์ต ๊ฐ์ ํ๋ผ๋ฏธํฐ๋ฅผ ๊ฐ์ง "8B" ๋ชจ๋ธ์ 16GB์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฐจ์งํ๋ฉฐ, ์ถ๊ฐ์ ์ธ ์ค๋ฒํค๋๋ฅผ ์ํ ์ฝ๊ฐ์ ์ฌ์ ๊ฐ ํ์ํฉ๋๋ค.
|
|
์ด๋ 3090์ด๋ 4090์ ๊ฐ์ 24GB์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ฐ์ถ ํ์ด์๋ GPU์ ์ ํฉํฉ๋๋ค.
|
|
|
|
์ผ๋ถ ์ฑํ
๋ชจ๋ธ์ "Mixture of Experts" ๋ชจ๋ธ์
๋๋ค.
|
|
์ด๋ฌํ ๋ชจ๋ธ์ ํฌ๊ธฐ๋ฅผ "8x7B" ๋๋ "141B-A35B"์ ๊ฐ์ด ๋ค๋ฅด๊ฒ ํ์ํ๊ณค ํฉ๋๋ค.
|
|
์ซ์๊ฐ ๋ค์ ๋ชจํธํ๋ค ๋๊ปด์ง ์ ์์ง๋ง, ์ฒซ ๋ฒ์งธ ๊ฒฝ์ฐ์๋ ์ฝ 56์ต(8x7) ๊ฐ์ ํ๋ผ๋ฏธํฐ๊ฐ ์๊ณ ,
|
|
๋ ๋ฒ์งธ ๊ฒฝ์ฐ์๋ ์ฝ 141์ต ๊ฐ์ ํ๋ผ๋ฏธํฐ๊ฐ ์๋ค๊ณ ํด์ํ ์ ์์ต๋๋ค.
|
|
|
|
์์ํ๋ ํ๋ผ๋ฏธํฐ๋น ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ 8๋นํธ, 4๋นํธ, ๋๋ ๊ทธ ์ดํ๋ก ์ค์ด๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
|
|
์ด ์ฃผ์ ์ ๋ํด์๋ ์๋์ [๋ฉ๋ชจ๋ฆฌ ๊ณ ๋ ค์ฌํญ](#memory-considerations) ์ฑํฐ์์ ๋ ์์ธํ ๋ค๋ฃฐ ์์ ์
๋๋ค.
|
|
|
|
### ๊ทธ๋ ๋ค๋ฉด ์ด๋ค ์ฑํ
๋ชจ๋ธ์ด ๊ฐ์ฅ ์ข์๊น์?[[but-which-chat-model-is-best]]
|
|
๋ชจ๋ธ์ ํฌ๊ธฐ ์ธ์๋ ๊ณ ๋ คํ ์ ์ด ๋ง์ต๋๋ค.
|
|
์ด๋ฅผ ํ๋์ ์ดํด๋ณด๋ ค๋ฉด **๋ฆฌ๋๋ณด๋**๋ฅผ ์ฐธ๊ณ ํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
|
|
๊ฐ์ฅ ์ธ๊ธฐ ์๋ ๋ฆฌ๋๋ณด๋ ๋ ๊ฐ์ง๋ [OpenLLM Leaderboard](https://huggingface.co/spaces/HuggingFaceH4/open_llm_leaderboard)์ [LMSys Chatbot Arena Leaderboard](https://chat.lmsys.org/?leaderboard)์
๋๋ค.
|
|
LMSys ๋ฆฌ๋๋ณด๋์๋ ๋
์ ๋ชจ๋ธ๋ ํฌํจ๋์ด ์์ผ๋,
|
|
`license` ์ด์์ ์ ๊ทผ ๊ฐ๋ฅํ ๋ชจ๋ธ์ ์ ํํ ํ
|
|
[Hugging Face Hub](https://huggingface.co/models?pipeline_tag=text-generation&sort=trending)์์ ๊ฒ์ํด ๋ณด์ธ์.
|
|
|
|
### ์ ๋ฌธ ๋ถ์ผ[[specialist-domains]]
|
|
์ผ๋ถ ๋ชจ๋ธ์ ์๋ฃ ๋๋ ๋ฒ๋ฅ ํ
์คํธ์ ๊ฐ์ ํน์ ๋๋ฉ์ธ์ด๋ ๋น์์ด๊ถ ์ธ์ด์ ํนํ๋์ด ์๊ธฐ๋ ํฉ๋๋ค.
|
|
์ด๋ฌํ ๋๋ฉ์ธ์์ ์์
ํ ๊ฒฝ์ฐ ํนํ๋ ๋ชจ๋ธ์ด ์ข์ ์ฑ๋ฅ์ ๋ณด์ผ ์ ์์ต๋๋ค.
|
|
ํ์ง๋ง ํญ์ ๊ทธ๋ด ๊ฒ์ด๋ผ ๋จ์ ํ๊ธฐ๋ ํ๋ญ๋๋ค.
|
|
ํนํ ๋ชจ๋ธ์ ํฌ๊ธฐ๊ฐ ์๊ฑฐ๋ ์ค๋๋ ๋ชจ๋ธ์ธ ๊ฒฝ์ฐ,
|
|
์ต์ ๋ฒ์ฉ ๋ชจ๋ธ์ด ๋ ๋ฐ์ด๋ ์ ์์ต๋๋ค.
|
|
๋คํํ๋ [domain-specific leaderboards](https://huggingface.co/blog/leaderboard-medicalllm)๊ฐ ์ ์ฐจ ๋ฑ์ฅํ๊ณ ์์ด, ํน์ ๋๋ฉ์ธ์ ์ต๊ณ ์ ๋ชจ๋ธ์ ์ฝ๊ฒ ์ฐพ์ ์ ์์ ๊ฒ์
๋๋ค.
|
|
|
|
|
|
## ํ์ดํ๋ผ์ธ ๋ด๋ถ๋ ์ด๋ป๊ฒ ๋์ด์๋๊ฐ?[[what-happens-inside-the-pipeline]]
|
|
์์ ๋น ๋ฅธ ์์์์๋ ๊ณ ์์ค(High-Level) ํ์ดํ๋ผ์ธ์ ์ฌ์ฉํ์์ต๋๋ค.
|
|
์ด๋ ๊ฐํธํ ๋ฐฉ๋ฒ์ด์ง๋ง, ์ ์ฐ์ฑ์ ๋จ์ด์ง๋๋ค.
|
|
์ด์ ๋ ์ ์์ค(Low-Level) ์ ๊ทผ ๋ฐฉ์์ ํตํด ๋ํ์ ํฌํจ๋ ๊ฐ ๋จ๊ณ๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
|
|
์ฝ๋ ์ํ๋ก ์์ํ ํ ์ด๋ฅผ ๋ถ์ํด ๋ณด๊ฒ ์ต๋๋ค:
|
|
|
|
```python
|
|
from transformers import AutoModelForCausalLM, AutoTokenizer
|
|
import torch
|
|
|
|
# ์
๋ ฅ๊ฐ์ ์ฌ์ ์ ์ค๋นํด ๋์ต๋๋ค
|
|
chat = [
|
|
{"role": "system", "content": "You are a sassy, wise-cracking robot as imagined by Hollywood circa 1986."},
|
|
{"role": "user", "content": "Hey, can you tell me any fun things to do in New York?"}
|
|
]
|
|
|
|
# 1: ๋ชจ๋ธ๊ณผ ํ ํฌ๋์ด์ ๋ฅผ ๋ถ๋ฌ์ต๋๋ค
|
|
model = AutoModelForCausalLM.from_pretrained("meta-llama/Meta-Llama-3-8B-Instruct", device_map="auto", dtype=torch.bfloat16)
|
|
tokenizer = AutoTokenizer.from_pretrained("meta-llama/Meta-Llama-3-8B-Instruct")
|
|
|
|
# 2: ์ฑํ
ํ
ํ๋ฆฟ์ ์ ์ฉํฉ๋๋ค
|
|
formatted_chat = tokenizer.apply_chat_template(chat, tokenize=False, add_generation_prompt=True)
|
|
print("Formatted chat:\n", formatted_chat)
|
|
|
|
# 3: ์ฑํ
์ ํ ํฐํํฉ๋๋ค (๋ฐ๋ก ์ด์ ๊ณผ์ ์์ tokenized=True๋ก ์ค์ ํ๋ฉด ํ๊บผ๋ฒ์ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค)
|
|
inputs = tokenizer(formatted_chat, return_tensors="pt", add_special_tokens=False)
|
|
# ํ ํฐํ๋ ์
๋ ฅ๊ฐ์ ๋ชจ๋ธ์ด ์ฌ๋ผ์ ์๋ ๊ธฐ๊ธฐ(CPU/GPU)๋ก ์ฎ๊น๋๋ค.
|
|
inputs = {key: tensor.to(model.device) for key, tensor in inputs.items()}
|
|
print("Tokenized inputs:\n", inputs)
|
|
|
|
# 4: ๋ชจ๋ธ๋ก๋ถํฐ ์๋ต์ ์์ฑํฉ๋๋ค
|
|
outputs = model.generate(**inputs, max_new_tokens=512, temperature=0.1)
|
|
print("Generated tokens:\n", outputs)
|
|
|
|
# 5: ๋ชจ๋ธ์ด ์ถ๋ ฅํ ํ ํฐ์ ๋ค์ ๋ฌธ์์ด๋ก ๋์ฝ๋ฉํฉ๋๋ค
|
|
decoded_output = tokenizer.decode(outputs[0][inputs['input_ids'].size(1):], skip_special_tokens=True)
|
|
print("Decoded output:\n", decoded_output)
|
|
```
|
|
์ฌ๊ธฐ์๋ ๊ฐ ๋ถ๋ถ์ด ์์ฒด ๋ฌธ์๊ฐ ๋ ์ ์์ ๋งํผ ๋ง์ ๋ด์ฉ์ด ๋ด๊ฒจ ์์ต๋๋ค!
|
|
๋๋ฌด ์์ธํ ์ค๋ช
ํ๊ธฐ๋ณด๋ค๋ ๋์ ๊ฐ๋
์ ๋ค๋ฃจ๊ณ , ์ธ๋ถ ์ฌํญ์ ๋งํฌ๋ ๋ฌธ์์์ ๋ค๋ฃจ๊ฒ ์ต๋๋ค.
|
|
์ฃผ์ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
|
|
|
|
1. [๋ชจ๋ธ](https://huggingface.co/learn/nlp-course/en/chapter2/3)๊ณผ [ํ ํฌ๋์ด์ ](https://huggingface.co/learn/nlp-course/en/chapter2/4?fw=pt)๋ฅผ Hugging Face Hub์์ ๋ก๋ํฉ๋๋ค.
|
|
2. ๋ํ๋ ํ ํฌ๋์ด์ ์ [์ฑํ
ํ
ํ๋ฆฟ](https://huggingface.co/docs/transformers/main/en/chat_templating)์ ์ฌ์ฉํ์ฌ ์์์ ๊ตฌ์ฑํฉ๋๋ค.
|
|
3. ๊ตฌ์ฑ๋ ์ฑํ
์ ํ ํฌ๋์ด์ ๋ฅผ ์ฌ์ฉํ์ฌ [ํ ํฐํ](https://huggingface.co/learn/nlp-course/en/chapter2/4)๋ฉ๋๋ค.
|
|
4. ๋ชจ๋ธ์์ ์๋ต์ [์์ฑ](https://huggingface.co/docs/transformers/en/llm_tutorial)ํฉ๋๋ค.
|
|
5. ๋ชจ๋ธ์ด ์ถ๋ ฅํ ํ ํฐ์ ๋ค์ ๋ฌธ์์ด๋ก ๋์ฝ๋ฉํฉ๋๋ค.
|
|
|
|
## ์ฑ๋ฅ, ๋ฉ๋ชจ๋ฆฌ์ ํ๋์จ์ด[[performance-memory-and-hardware]]
|
|
์ด์ ๋๋ถ๋ถ์ ๋จธ์ ๋ฌ๋ ์์
์ด GPU์์ ์คํ๋๋ค๋ ๊ฒ์ ์์ค ๊ฒ๋๋ค.
|
|
๋ค์ ๋๋ฆฌ๊ธฐ๋ ํด๋ CPU์์ ์ฑํ
๋ชจ๋ธ์ด๋ ์ธ์ด ๋ชจ๋ธ๋ก๋ถํฐ ํ
์คํธ๋ฅผ ์์ฑํ๋ ๊ฒ๋ ๊ฐ๋ฅํฉ๋๋ค.
|
|
ํ์ง๋ง ๋ชจ๋ธ์ GPU ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ ค๋์ ์๋ง ์๋ค๋ฉด, GPU๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ผ๋ก ๋ ์ ํธ๋๋ ๋ฐฉ์์
๋๋ค.
|
|
|
|
### ๋ฉ๋ชจ๋ฆฌ ๊ณ ๋ ค์ฌํญ[[memory-considerations]]
|
|
|
|
๊ธฐ๋ณธ์ ์ผ๋ก, [`TextGenerationPipeline`]์ด๋ [`AutoModelForCausalLM`]๊ณผ ๊ฐ์
|
|
Hugging Face ํด๋์ค๋ ๋ชจ๋ธ์ `float32` ์ ๋ฐ๋(Precision)๋ก ๋ก๋ํฉ๋๋ค.
|
|
์ด๋ ํ๋ผ๋ฏธํฐ๋น 4๋ฐ์ดํธ(32๋นํธ)๋ฅผ ํ์๋ก ํ๋ฏ๋ก,
|
|
80์ต ๊ฐ์ ํ๋ผ๋ฏธํฐ๋ฅผ ๊ฐ์ง "8B" ๋ชจ๋ธ์ ์ฝ 32GB์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ์๋ก ํ๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
|
|
ํ์ง๋ง ์ด๋ ๋ญ๋น์ผ ์ ์์ต๋๋ค!
|
|
๋๋ถ๋ถ์ ์ต์ ์ธ์ด ๋ชจ๋ธ์ ํ๋ผ๋ฏธํฐ๋น 2๋ฐ์ดํธ๋ฅผ ์ฌ์ฉํ๋ "bfloat16" ์ ๋ฐ๋(Precision)๋ก ํ์ต๋ฉ๋๋ค.
|
|
ํ๋์จ์ด๊ฐ ์ด๋ฅผ ์ง์ํ๋ ๊ฒฝ์ฐ(Nvidia 30xx/Axxx ์ด์),
|
|
`dtype` ํ๋ผ๋ฏธํฐ๋ก ์์ ๊ฐ์ด `bfloat16` ์ ๋ฐ๋(Precision)๋ก ๋ชจ๋ธ์ ๋ก๋ํ ์ ์์ต๋๋ค.
|
|
|
|
๋ํ, 16๋นํธ๋ณด๋ค ๋ ๋ฎ์ ์ ๋ฐ๋(Precision)๋ก ๋ชจ๋ธ์ ์์ถํ๋
|
|
"์์ํ(quantization)" ๋ฐฉ๋ฒ์ ์ฌ์ฉํ ์๋ ์์ต๋๋ค.
|
|
์ด ๋ฐฉ๋ฒ์ ๋ชจ๋ธ์ ๊ฐ์ค์น๋ฅผ ์์ค ์์ถํ์ฌ ๊ฐ ํ๋ผ๋ฏธํฐ๋ฅผ 8๋นํธ,
|
|
4๋นํธ ๋๋ ๊ทธ ์ดํ๋ก ์ค์ผ ์ ์์ต๋๋ค.
|
|
ํนํ 4๋นํธ์์ ๋ชจ๋ธ์ ์ถ๋ ฅ์ด ๋ถ์ ์ ์ธ ์ํฅ์ ๋ฐ์ ์ ์์ง๋ง,
|
|
๋ ํฌ๊ณ ๊ฐ๋ ฅํ ์ฑํ
๋ชจ๋ธ์ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ฆฌ๊ธฐ ์ํด ์ด ๊ฐ์ ํธ๋ ์ด๋์คํ๋ฅผ ๊ฐ์ํ ๊ฐ์น๊ฐ ์์ต๋๋ค.
|
|
์ด์ `bitsandbytes`๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฅผ ์ค์ ๋ก ํ์ธํด ๋ณด๊ฒ ์ต๋๋ค:
|
|
|
|
```python
|
|
from transformers import AutoModelForCausalLM, BitsAndBytesConfig
|
|
|
|
quantization_config = BitsAndBytesConfig(load_in_8bit=True) # You can also try load_in_4bit
|
|
model = AutoModelForCausalLM.from_pretrained("meta-llama/Meta-Llama-3-8B-Instruct", device_map="auto", quantization_config=quantization_config)
|
|
```
|
|
|
|
์์ ์์
์ `pipeline` API์๋ ์ ์ฉ ๊ฐ๋ฅํฉ๋๋ค:
|
|
|
|
```python
|
|
from transformers import pipeline, BitsAndBytesConfig
|
|
|
|
quantization_config = BitsAndBytesConfig(load_in_8bit=True) # You can also try load_in_4bit
|
|
pipe = pipeline("text-generation", "meta-llama/Meta-Llama-3-8B-Instruct", device_map="auto", model_kwargs={"quantization_config": quantization_config})
|
|
```
|
|
|
|
`bitsandbytes` ์ธ์๋ ๋ชจ๋ธ์ ์์ํํ๋ ๋ค์ํ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
|
|
์์ธํ ๋ด์ฉ์ [Quantization guide](./quantization)๋ฅผ ์ฐธ์กฐํด ์ฃผ์ธ์.
|
|
|
|
|
|
### ์ฑ๋ฅ ๊ณ ๋ ค์ฌํญ[[performance-considerations]]
|
|
|
|
<Tip>
|
|
|
|
์ธ์ด ๋ชจ๋ธ ์ฑ๋ฅ๊ณผ ์ต์ ํ์ ๋ํ ๋ณด๋ค ์์ธํ ๊ฐ์ด๋๋ [LLM Inference Optimization](./llm_optims)์ ์ฐธ๊ณ ํ์ธ์.
|
|
|
|
</Tip>
|
|
|
|
|
|
์ผ๋ฐ์ ์ผ๋ก ๋ ํฐ ์ฑํ
๋ชจ๋ธ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ ๋ง์ด ์๊ตฌํ๊ณ ,
|
|
์๋๋ ๋๋ ค์ง๋ ๊ฒฝํฅ์ด ์์ต๋๋ค. ๊ตฌ์ฒด์ ์ผ๋ก ๋งํ์๋ฉด,
|
|
์ฑํ
๋ชจ๋ธ์์ ํ
์คํธ๋ฅผ ์์ฑํ ๋๋ ์ปดํจํ
ํ์๋ณด๋ค **๋ฉ๋ชจ๋ฆฌ ๋์ญํญ**์ด ๋ณ๋ชฉ ํ์์ ์ผ์ผํค๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
|
|
์ด๋ ๋ชจ๋ธ์ด ํ ํฐ์ ํ๋์ฉ ์์ฑํ ๋๋ง๋ค ํ๋ผ๋ฏธํฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์์ ์ฝ์ด์ผ ํ๊ธฐ ๋๋ฌธ์
๋๋ค.
|
|
๋ฐ๋ผ์ ์ฑํ
๋ชจ๋ธ์์ ์ด๋น ์์ฑํ ์ ์๋ ํ ํฐ ์๋ ๋ชจ๋ธ์ด ์์นํ ๋ฉ๋ชจ๋ฆฌ์ ๋์ญํญ์ ๋ชจ๋ธ์ ํฌ๊ธฐ๋ก ๋๋ ๊ฐ์ ๋น๋กํฉ๋๋ค.
|
|
|
|
์์ ์์ ์์๋ ๋ชจ๋ธ์ด bfloat16 ์ ๋ฐ๋(Precision)๋ก ๋ก๋๋ ๋ ์ฉ๋์ด ์ฝ 16GB์์ต๋๋ค.
|
|
์ด ๊ฒฝ์ฐ, ๋ชจ๋ธ์ด ์์ฑํ๋ ๊ฐ ํ ํฐ๋ง๋ค 16GB๋ฅผ ๋ฉ๋ชจ๋ฆฌ์์ ์ฝ์ด์ผ ํ๋ค๋ ์๋ฏธ์
๋๋ค.
|
|
์ด ๋ฉ๋ชจ๋ฆฌ ๋์ญํญ์ ์๋น์์ฉ CPU์์๋ 20-100GB/sec,
|
|
์๋น์์ฉ GPU๋ Intel Xeon, AMD Threadripper/Epyc,
|
|
์ ํ ์ค๋ฆฌ์ฝ๊ณผ ๊ฐ์ ํน์ CPU์์๋ 200-900GB/sec,
|
|
๋ฐ์ดํฐ ์ผํฐ GPU์ธ Nvidia A100์ด๋ H100์์๋ ์ต๋ 2-3TB/sec์ ์ด๋ฅผ ์ ์์ต๋๋ค.
|
|
์ด๋ฌํ ์ ๋ณด๋ ๊ฐ์ ํ๋์จ์ด์์ ์์ฑ ์๋๋ฅผ ์์ํ๋ ๋ฐ ๋์์ด ๋ ๊ฒ์
๋๋ค.
|
|
|
|
๋ฐ๋ผ์ ํ
์คํธ ์์ฑ ์๋๋ฅผ ๊ฐ์ ํ๋ ค๋ฉด ๊ฐ์ฅ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ ๋ชจ๋ธ์ ํฌ๊ธฐ๋ฅผ ์ค์ด๊ฑฐ๋(์ฃผ๋ก ์์ํ๋ฅผ ์ฌ์ฉ),
|
|
๋ฉ๋ชจ๋ฆฌ ๋์ญํญ์ด ๋ ๋์ ํ๋์จ์ด๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์
๋๋ค.
|
|
์ด ๋์ญํญ ๋ณ๋ชฉ ํ์์ ํผํ ์ ์๋ ๊ณ ๊ธ ๊ธฐ์ ๋ ์ฌ๋ฌ ๊ฐ์ง ์์ต๋๋ค.
|
|
๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ๋ฐฉ๋ฒ์ [๋ณด์กฐ ์์ฑ](https://huggingface.co/blog/assisted-generation), "์ถ์ธก ์ํ๋ง"์ด๋ผ๊ณ ๋ถ๋ฆฌ๋ ๊ธฐ์ ์
๋๋ค.
|
|
์ด ๊ธฐ์ ์ ์ข
์ข
๋ ์์ "์ด์ ๋ชจ๋ธ"์ ์ฌ์ฉํ์ฌ ์ฌ๋ฌ ๊ฐ์ ๋ฏธ๋ ํ ํฐ์ ํ ๋ฒ์ ์ถ์ธกํ ํ,
|
|
์ฑํ
๋ชจ๋ธ๋ก ์์ฑ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํฉ๋๋ค.
|
|
๋ง์ฝ ์ฑํ
๋ชจ๋ธ์ด ์ถ์ธก์ ํ์ธํ๋ฉด, ํ ๋ฒ์ ์์ ํ์์ ์ฌ๋ฌ ๊ฐ์ ํ ํฐ์ ์์ฑํ ์ ์์ด
|
|
๋ณ๋ชฉ ํ์์ด ํฌ๊ฒ ์ค์ด๋ค๊ณ ์์ฑ ์๋๊ฐ ๋นจ๋ผ์ง๋๋ค.
|
|
|
|
๋ง์ง๋ง์ผ๋ก, "Mixture of Experts" (MoE) ๋ชจ๋ธ์ ๋ํด์๋ ์ง๊ณ ๋์ด๊ฐ ๋ณด๋๋ก ํฉ๋๋ค.
|
|
Mixtral, Qwen-MoE, DBRX์ ๊ฐ์ ์ธ๊ธฐ ์๋ ์ฑํ
๋ชจ๋ธ์ด ๋ฐ๋ก MoE ๋ชจ๋ธ์
๋๋ค.
|
|
์ด ๋ชจ๋ธ๋ค์ ํ ํฐ์ ์์ฑํ ๋ ๋ชจ๋ ํ๋ผ๋ฏธํฐ๊ฐ ์ฌ์ฉ๋์ง ์์ต๋๋ค.
|
|
์ด๋ก ์ธํด MoE ๋ชจ๋ธ์ ์ ์ฒด ํฌ๊ธฐ๊ฐ ์๋นํ ํด ์ ์์ง๋ง,
|
|
์ฐจ์งํ๋ ๋ฉ๋ชจ๋ฆฌ ๋์ญํญ์ ๋ฎ์ ํธ์
๋๋ค.
|
|
๋ฐ๋ผ์ ๋์ผํ ํฌ๊ธฐ์ ์ผ๋ฐ "์กฐ๋ฐํ(Dense)" ๋ชจ๋ธ๋ณด๋ค ๋ช ๋ฐฐ ๋น ๋ฅผ ์ ์์ต๋๋ค.
|
|
ํ์ง๋ง ๋ณด์กฐ ์์ฑ๊ณผ ๊ฐ์ ๊ธฐ์ ์ MoE ๋ชจ๋ธ์์ ๋นํจ์จ์ ์ผ ์ ์์ต๋๋ค.
|
|
์๋ก์ด ์ถ์ธก๋ ํ ํฐ์ด ์ถ๊ฐ๋๋ฉด์ ๋ ๋ง์ ํ๋ผ๋ฏธํฐ๊ฐ ํ์ฑํ๋๊ธฐ ๋๋ฌธ์,
|
|
MoE ์ํคํ
์ฒ๊ฐ ์ ๊ณตํ๋ ์๋ ์ด์ ์ด ์์๋ ์ ์์ต๋๋ค. |