반응형

허깅 페이스 파이썬 라이브러리를 사용해 보자.

 

import huggingface_hub

huggingface_hub.login(token="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")

# 로그인 후 사용자 정보 가져오기
user_info = huggingface_hub.whoami()
print(user_info['fullname'])

# 로그아웃
huggingface_hub.logout()

 

 

from huggingface_hub import InferenceClient

# 기본 질문-응답(question answering) 모델을 사용하여 질문에 대한 답변 생성
client = InferenceClient(token="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")
answer = client.question_answering(question="What is the capital of France?",
								   context="France is a country in Europe. Its capital is Paris.")
print(answer)
#print(answer.answer)

# 대화(conversational) 모델을 사용하여 대화 생성
client = InferenceClient(token="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",
						 model="Qwen/Qwen2.5-7B-Instruct")
messages = [{"role": "user", "content": "프랑스의 수도는 어디야?"}]
answer = client.chat_completion(messages=messages, max_tokens=100)
print(answer)
#print(answer.choices[0].message.content)

# 이미지 생성(text-to-image) 모델을 사용하여 텍스트를 기반으로 이미지 생성
client = InferenceClient(token="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",
						 model="stabilityai/stable-diffusion-xl-base-1.0")
image = client.text_to_image("A beautiful sunset over the mountains.")
image.save("sunset.png")

 

모델에 따라 답변 및 여러 가지 정보가 생성된다.

 

텍스트에 따른 이미지를 생성한다.

 

 

from transformers import AutoModelForCausalLM

model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen3-0.6B", dtype="auto", device_map="auto")
# 미리 학습된 인과적 언어 모델을 로드한다.
print(model._get_name())

 

처음 실행하면 모델을 다운로드받고 이름을 출력한다. (C:\Users\Sean\.cache\huggingface\hub\models--Qwen--Qwen3-0.6B)

 

다음 실행부터는 다운로드된 모델을 로딩만 한다.

 

from transformers import AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained(pretrained_model_name_or_path="Qwen/Qwen3-0.6B")
# 미리 학습된 모델의 토크나이저를 불러오는 코드이다. "Qwen/Qwen3-0.6B"는 모델의 이름을 나타낸다.

result = tokenizer("Hello, how are you?", return_tensors="pt")
# pt: PyTorch를 나타내며, return_tensors="pt"는 토큰화된 결과를 PyTorch 텐서 형식으로 반환하도록 지정하는 것이다.
print(result)

 

처음 실행 시 필요한 파일을 다운로드한다. 이후 실행 시 마지막 결과만 출력된다.

 

from transformers import AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained(pretrained_model_name_or_path="Qwen/Qwen2.5-7B-Instruct")
# 미리 학습된 모델의 토크나이저를 불러오는 코드이다. "Qwen/Qwen2.5-7B-Instruct"는 모델의 이름을 나타낸다.

result = tokenizer("Hello, how are you?", return_tensors="pt")
# pt: PyTorch를 나타내며, return_tensors="pt"는 토큰화된 결과를 PyTorch 텐서 형식으로 반환하도록 지정하는 것이다.
print(result)

 

다른 모델을 사용했지만 토큰화 결과는 같다. (같은 Qwen 모델이라 그런거 같다)

 

더보기

 LGAI-EXAONE 모델을 사용하면 토큰화 결과가 달라진다.

 

from transformers import AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained(pretrained_model_name_or_path="LGAI-EXAONE/EXAONE-4.0-1.2B")
result = tokenizer("Hello, how are you?", return_tensors="pt")
print(result)

 

 

 

 

from transformers import AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained(pretrained_model_name_or_path="Qwen/Qwen2.5-7B-Instruct")
# 미리 학습된 모델의 토크나이저를 불러오는 코드이다. "Qwen/Qwen2.5-7B-Instruct"는 모델의 이름을 나타낸다.

result = tokenizer("Hello, how are you?", return_tensors="pt")
# pt: PyTorch를 나타내며, return_tensors="pt"는 토큰화된 결과를 PyTorch 텐서 형식으로 반환하도록 지정하는 것이다.
print(result)

result = tokenizer.encode("Hello, how are you?", return_tensors="pt")
# encode() 메서드는 입력 텍스트를 토큰화하고, 토큰 ID만 반환하는 메서드이다.
print(result)

 

 

from transformers import AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained(pretrained_model_name_or_path="Qwen/Qwen2.5-7B-Instruct")
# 미리 학습된 모델의 토크나이저를 불러오는 코드이다. "Qwen/Qwen2.5-7B-Instruct"는 모델의 이름을 나타낸다.

result = tokenizer.encode("Hello, how are you?", return_tensors="pt")
# encode() 메서드는 입력 텍스트를 토큰화하고, 토큰 ID만 반환하는 메서드이다.
print(result)

result = tokenizer.decode(result[0], skip_special_tokens=True)
# decode() 메서드는 토큰 ID를 다시 텍스트로 변환하는 메서드이다.
# clean_up_tokenization_spaces=True 옵션은 토큰화 과정에서 생긴 불필요한 공백을 제거하는 옵션이다.
print(result)

 

 

from transformers import AutoModelForCausalLM, AutoTokenizer

model_name = "LGAI-EXAONE/EXAONE-4.0-1.2B"
model = AutoModelForCausalLM.from_pretrained(model_name, dtype="bfloat16", device_map="auto")
tokenizer = AutoTokenizer.from_pretrained(model_name)

prompt = "네가 얼마나 대단한지 설명해 봐"

messages = [
    {"role": "user", "content": prompt}
]
inputs = tokenizer.apply_chat_template(
    messages,
    tokenize=True,
    add_generation_prompt=True,
    return_tensors="pt",
    return_dict=True
).to(model.device)
# .to(model.device): 모델이 실행되는 장치(GPU 또는 CPU)로 입력 데이터를 이동시키는 역할을 함.

output = model.generate(
    **inputs,
    max_new_tokens=256,
    do_sample=False,
)
# **inputs의 의미: inputs 딕셔너리의 키-값 쌍을 언패킹하여 model.generate 함수에 전달하는 것.
# 즉, inputs 딕셔너리의 각 항목이 model.generate 함수의 인자로 전달됨.
# do_sample=False의 의미: 모델이 생성할 텍스트를 결정할 때 무작위성을 배제하고,
# 가장 가능성이 높은 토큰을 선택하도록 설정하는 것.

print(tokenizer.decode(output[0]))

 

EXAONE

 

from transformers import AutoModelForCausalLM, AutoTokenizer

model_name = "QWen/Qwen3-0.6B"
model = AutoModelForCausalLM.from_pretrained(model_name, dtype="bfloat16", device_map="auto")
tokenizer = AutoTokenizer.from_pretrained(model_name)

prompt = "네가 얼마나 대단한지 설명해 봐"

messages = [
    {"role": "user", "content": prompt}
]
inputs = tokenizer.apply_chat_template(
    messages,
    tokenize=True,
    add_generation_prompt=True,
    return_tensors="pt",
    return_dict=True
).to(model.device)
# .to(model.device): 모델이 실행되는 장치(GPU 또는 CPU)로 입력 데이터를 이동시키는 역할을 함.

output = model.generate(
    **inputs,
    max_new_tokens=256,
    do_sample=False,
)
# **inputs의 의미: inputs 딕셔너리의 키-값 쌍을 언패킹하여 model.generate 함수에 전달하는 것.
# 즉, inputs 딕셔너리의 각 항목이 model.generate 함수의 인자로 전달됨.
# do_sample=False의 의미: 모델이 생성할 텍스트를 결정할 때 무작위성을 배제하고,
# 가장 가능성이 높은 토큰을 선택하도록 설정하는 것.

print(tokenizer.decode(output[0]))

 

QWen

 

 

from transformers import pipeline

generator = pipeline(task='text-generation', model='LGAI-EXAONE/EXAONE-4.0-1.2B')
# EXAONE과 같은 인스트럭션(대화형) 튜닝 모델은 챗 템플릿 형식으로 프롬프트를 전달해야 올바른 답변이 나온다.
messages = [
    {"role": "user", "content": "한국의 수도는 어디야?"}
]

# return_full_text=False를 주면 질문은 제외하고 생성된 답변만 반환한다.
result = generator(messages, return_full_text=False)

print(result)
#print(result[0]['generated_text'])

 

EXAONE

 

from transformers import pipeline

generator = pipeline(task='text-generation', model='QWen/Qwen3-0.6B')
messages = [
    {"role": "user", "content": "한국의 수도는 어디야?"}
]

# return_full_text=False를 주면 질문은 제외하고 생성된 답변만 반환한다.
result = generator(messages, return_full_text=False)

print(result)
#print(result[0]['generated_text'])

 

QWen

 

※ 참고

Hub Python Library

Transformers  Tokenizers

Datasets

 

반응형
Posted by J-sean
: