werty1248/Korean-1930-Novel-Scene-Summarize
Viewer โข Updated โข 12.1k โข 82 โข 4
How to use werty1248/Qwen2-7B-Korean-1930-Novel-sft with Transformers:
# Use a pipeline as a high-level helper
from transformers import pipeline
pipe = pipeline("text-generation", model="werty1248/Qwen2-7B-Korean-1930-Novel-sft")
messages = [
{"role": "user", "content": "Who are you?"},
]
pipe(messages) # pip install -U transformers accelerate
# Load model directly
from transformers import AutoTokenizer, AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained("werty1248/Qwen2-7B-Korean-1930-Novel-sft")
model = AutoModelForCausalLM.from_pretrained("werty1248/Qwen2-7B-Korean-1930-Novel-sft", device_map="auto")
messages = [
{"role": "user", "content": "Who are you?"},
]
inputs = tokenizer.apply_chat_template(
messages,
add_generation_prompt=True,
tokenize=True,
return_dict=True,
return_tensors="pt",
).to(model.device)
outputs = model.generate(**inputs, max_new_tokens=256)
print(tokenizer.decode(outputs[0][inputs["input_ids"].shape[-1]:]))How to use werty1248/Qwen2-7B-Korean-1930-Novel-sft with vLLM:
# Install vLLM from pip:
pip install vllm
# Start the vLLM server:
vllm serve "werty1248/Qwen2-7B-Korean-1930-Novel-sft"
# Call the server using curl (OpenAI-compatible API):
curl -X POST "http://localhost:8000/v1/chat/completions" \
-H "Content-Type: application/json" \
--data '{
"model": "werty1248/Qwen2-7B-Korean-1930-Novel-sft",
"messages": [
{
"role": "user",
"content": "What is the capital of France?"
}
]
}'docker model run hf.co/werty1248/Qwen2-7B-Korean-1930-Novel-sft
How to use werty1248/Qwen2-7B-Korean-1930-Novel-sft with SGLang:
# Install SGLang from pip:
pip install sglang
# Start the SGLang server:
python3 -m sglang.launch_server \
--model-path "werty1248/Qwen2-7B-Korean-1930-Novel-sft" \
--host 0.0.0.0 \
--port 30000
# Call the server using curl (OpenAI-compatible API):
curl -X POST "http://localhost:30000/v1/chat/completions" \
-H "Content-Type: application/json" \
--data '{
"model": "werty1248/Qwen2-7B-Korean-1930-Novel-sft",
"messages": [
{
"role": "user",
"content": "What is the capital of France?"
}
]
}'docker run --gpus all \
--shm-size 32g \
-p 30000:30000 \
-v ~/.cache/huggingface:/root/.cache/huggingface \
--env "HF_TOKEN=<secret>" \
--ipc=host \
lmsysorg/sglang:latest \
python3 -m sglang.launch_server \
--model-path "werty1248/Qwen2-7B-Korean-1930-Novel-sft" \
--host 0.0.0.0 \
--port 30000
# Call the server using curl (OpenAI-compatible API):
curl -X POST "http://localhost:30000/v1/chat/completions" \
-H "Content-Type: application/json" \
--data '{
"model": "werty1248/Qwen2-7B-Korean-1930-Novel-sft",
"messages": [
{
"role": "user",
"content": "What is the capital of France?"
}
]
}'How to use werty1248/Qwen2-7B-Korean-1930-Novel-sft with Docker Model Runner:
docker model run hf.co/werty1248/Qwen2-7B-Korean-1930-Novel-sft
system prompt์ ํจ๊ป ์์ค์ ์ฒซ ๋ฌธ๋จ์ ์ ๊ณต
์ดํ user๊ฐ ์๋๋ฆฌ์ค(50%) ๋๋ ์ด๋ฒคํธ(50%)๋ฅผ ์ ๊ณตํ๋ฉด assistant๊ฐ ๋ต๋ณ์ ์์ฑ
3-shot multi-turn ๋ฐ์ดํฐ ํ์์ผ๋ก ๋ณํํ์ฌ ํ์ต
ํ๋กฌํํธ ์์๋ ์๋์ ์์ต๋๋ค.
Axolotl(full config๋ ์๋์ ์์ต๋๋ค)
1xA100์์ ์ฝ 8์๊ฐ ํ์ต
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM, pipeline
tokenizer = AutoTokenizer.from_pretrained("werty1248/Qwen2-7B-Korean-1930-Novel-sft")
model = AutoModelForCausalLM.from_pretrained("werty1248/Qwen2-7B-Korean-1930-Novel-sft", torch_dtype=torch.bfloat16).to('cuda')
system_prompt = """๋น์ ์ ์์ค ์์ฑ ์ด์์คํดํธ์
๋๋ค. ๋น์ ์ ์๋ฌด๋ ์ ์ ์ ๊ฐ์ด๋์ ๋ฐ๋ผ 1900~1940๋
๋ ๊ทผ๋ ํ๊ตญ ์์ค์ ์์ฑํ๋ ๊ฒ์
๋๋ค.
- ์ฃผ์ด์ง ์๋๋ฆฌ์ค ์์ฝ์ ํ์ธํ๊ณ , ์ด์ ๋ํ๋ฅผ ์ฐธ๊ณ ํ์ฌ ํ๋กฏ์ ๊ตฌ์ฑํ์ญ์์ค.
- ํ๋ถํ ํ๊ตญ์ด ํํ ๋ฐ ๋ํ๋ฅผ ์ฌ์ฉํ์ฌ ์ฐฝ์์ ์ผ๋ก ์งง์ ์ฌ์ ์์ฑํ์ธ์.
- ์ฌ์ ๋์ฌ์ ๊ทผ๋ ํ๊ตญ ํน์ ์ ํํ, ์ดํ, ์ฌํฌ๋ฆฌ, ์กด๋๋ง๊ณผ ๋ฐ๋ง์ ๋ฐ์ํ์ญ์์ค.
- ์ฌ์ ์ฃผ์ ์ฌ๊ฑด์ ๊ทผ๋ ํ๊ตญ์ ์ญ์ฌ์ , ๊ธฐ์ ์ ํน์ฑ์ ๋ฐ์ํ์ญ์์ค.
- ์ฌ์ 5~10๋ฌธ์ฅ์ผ๋ก ๊ตฌ์ฑํ์ธ์.
"""
first_message = """### ์ฒซ ๋ฌธ๋จ
ํ๋์ ๋ถ์ฌ๋ฅด๋ ์ฉ์ ๋
ธ์ฌ์๋ ์ํ์ง๊ณ
์์๋ค์ ์๋น๋ ์ฌํ ์์ ๋ฌปํ๋ฒ๋ฆฐ
๊ทธ๋ฆฌ๊ณ ๊ทธ๋ฐ ๊ฒ๋ค์ ๋๊ตฌ๋ ์ ๊ฒฝ์ฐ์ง ์๋
์์กด์ด ์ฒ๋ฐํ ๋๋ด์ด ๋ ์๋์
ํ ๋จ์๊ฐ ์ฌ๋ง์ ๊ฑท๊ณ ์์๋ค.
"""
scenario = """### ๋ฑ์ฅ์ธ๋ฌผ
์ฌ๊ด ์ฃผ์ธ, ์ผ์ด๊ฑด ๋๋ผ์นด
### ์๋๋ฆฌ์ค
์ฌ๊ด ์ฃผ์ธ์ด ๋ฌธ๋ ์ฐฝ๋ฐ์ ๋ฐ๋ผ๋ณธ๋ค. ์ฌ๊ด ์ฃผ๋ณ์ ์จํต ์ฌ๋ง์ด๋ค. ์งํ์ ์ ๋ฉ๋ฆฌ์ ํ ์ฌ๋ด๊ฐ ํผ์ง๋งํ ์๋ฃจ๋ฅผ ์ง์ง ๋๋ฉด์ ์ฌ๊ด ๋ฐฉํฅ์ผ๋ก ๊ฑธ์ด์จ๋ค.
"""
messages = [{'role':'system', 'content':system_prompt + first_message},
{'role':'user', 'content':scenario},]
pipe = pipeline("text-generation", model=model, tokenizer=tokenizer, max_new_tokens=512)
prompt = pipe.tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
outputs = pipe(
prompt,
do_sample=True,
temperature=0.8,
top_k=50,
top_p=0.95,
add_special_tokens=True
)
print(outputs[0]["generated_text"][len(prompt):])
ํ๋์ ๊นจ๋ํ์๋ค. ๋ฐ๋๋ ์์ด์ง ์์๋ค. ๋ฐ์ ์์ ๊ตด๋ฌ์ ธ ์๋ ํฌ์น์ด ํ ๋ฉ๋งํ๊ณ ํธ๋ฅธ ํ๋น ์๋ ์ ๋ณด์๋ค.
๊ฑฐ๊ธฐ๋ ๋ง์นจ ํ ์ฑ์ ์ฌ๊ด์ด ์ง์ฒด๋ก ๊ฝํ ์์๋ค. ์ข์ฐ ๋ฉ๋ฆฌ ๋ฐ์๊ฐ ์ฐ์ ๋ฟ์ด๋ค. ๋๋ฌด๋ ์๋ชฉ๋ ์๋ ์จ ์ฒ์ง๊ฐ ํคํ ์ฌ๊ด ์์ ์์์ธ๊ณ ์๋ ๊ฒ์ด๋ค. ์ผ๋ฅธ ๋ณด๋ฉด ํ ์กฐ๊ฐ ์์ถ ์ ๊ฐ๊ธฐ๋ ํ์ง๋ง ๊ฑด์ถ์ด๋ผ๋๋ ๋ณด๋ค๋ ๋ํ์ ๋
์ ๋ด์ด๋๊ณ ๋จ์ํ ๊ฐํ ํ๋๋ฅผ ๊ฑธ์ด์ ๊ทธ๋๋ก ๋ฒ์ดํ๋ โ์ฌ๊ดโ์ด๋ค. ๋ช๋ช ์ข์ ๊ธธ๋ง ๋ค์ด์๋ค๊ฐ ์ฌ๋ผ์ก์ ๋ฟ ํ ๊ธธ๋ ์ ๋ซ๋ ค์ง ๊ทธ ์๋ฆฌ์ ๊ทธ๋๋ก ์งํฑ๋์ด ์๋ ์ฌ๊ด์ด๋ค. ๊ธธ์ ๋ํ๋๋ ์ฌ๋์ ์๋ค. ์ข์ฐ๋ก ๋ฐ์๋ฅผ ๋ผ๊ณ ๋ ๋น์ด ์๋ ์ฐ ์ค์์ ๊ฐ๊ฐ์ด ๊ณ ๊ธฐ ๊ตฝ๋ ๋ฅ์ด์ ์ฏ๋ฐ๊ตฌ๋๋ฉฐ ๊ณ ๊น๊ฐ๋ง๋ฅผ ๊ฑธ๊ณ ํ์ธ๋ง ๋ช ๋ง๋ฆฌ์ฉ ์ง๋๊ฐ๊ณ ํคํ๊ฒ ์ ๋ฐ๋ฅ์ ํ๋น๋ง ๋น์น๊ณ ํ๋ ์ธ์ธํ ์ฌ๊ด์ด๋ค. ๊ทธ๊ฒ์ด ๋ฃธ_service๋ผ๋ ์ธ๊ณ์๋ ๋ฌ๋ฆฌ ์ฃผ์ธ๋ ์๊ณ ์ฌ์ฅ๋ ์๊ณ ์๋ ์๊ณ ํ ๊ฐํ๋ง ๊ฑธ๊ณ ์ฒ๋น์ฒ๋ผ ์ธ๋กญ๊ฒ ์งํค๊ณ ์๋ ๋ชจ์์ด๋ค.
๊ทธ๋ฐ ์ฌ๊ด์์ ์ด์ฝ๊ณ ์์ด ํ ์ฌ๋ ๋ํ๋ฌ๋ค. ์ฐฝ๋ฌธ์ด ์ด๋ ธ๋ค. ๋ฐ์ ๋ด๋ค๋ณด๋ ํ ์ ์ ๊ฒ์ ๊ทธ๋ฆผ์๊ฐ ์ฐฝ ์์์ ๋๋๋ด ์ค๋ฏ๋ฌ์ง๋ค. ๊ทธ๋ฌ๋๋ ๋ค์ ํ์ฐธ ํ์ ๊ทธ ๊ฒ์ ๊ทธ๋ฆผ์๋ ์๋ชฉ์ผ๋ก ์ฐจ์ฐจ ๋์ ๊ฐ์ง๊ณ ๋ ๊ทธ๋๋ก ์ฌ๋ผ์ง๋ ๊ฒ์ด๋ค.
๊ทธ๋ก๋ถํฐ ์ฌ๊ด์ ์๋ก์ด ์ผ์ ๋นํ์๋ค. ๋ฐ์๋ฆฌ์ค ์๋ฃจ๋ฅผ ๋ค๊ณ ํ ์ฌ๋์ด๊ฐ ๊ฑธ์ด ๋ค์ด์ค์ง ์์๋๊ฐ. ์ผ๊ตด์ ๋จผ๋น์ผ๋ก ๋๋ํ ๋ชป ๋ณด์ด๋ ๋ฒ์จ ์ฌ๋ฉด ์ฌ์ค ๊ฐ๋ฐ์ ์ ๋๋ ๊ณณ์ ํผ์งํ ์๋ฃจ๋ฅผ
"๊ทธ๊ฒ ๋๊ตฌ๋? ์ ์ด๋ ๊ฒ ๋จผ ๊ณณ์์ ์ด๊ณณ์ผ๋ก ์?" ์ฌ๊ด ์ฃผ์ธ์ด ๋ฌผ์ด๋ณด๋ฉฐ ์ฐฝ๋ฌธ์ ๋ฒ๋ฆฌ๊ณ ๋งํ๋ค. ๊ทธ๋
์ ๋ชฉ์๋ฆฌ๋ ์ฌ๋ง์ ๊ฑด์กฐํจ๊ณผ ํจ๊ป ๊ฑฐ์น ๋ฐ๋์ ๊ฐ๋ผ์์๋ค.
์ผ์ด๊ฑด ๋๋ผ์นด๋ผ๋ ์ฌ๋ด๋ ์์ ์ ์๋ฃจ๋ฅผ ๋ ์ง์ง ๋๋ฉฐ ์ฌ๊ด ์ชฝ์ผ๋ก ๋ค๊ฐ๊ฐ๋ค. ๊ทธ์ ๋์๋ ํฌ๋ฏธํ๊ฒ ๋ณด์ด๋ ๋จผ์ง์ ๋จผ์ง๊ฐ ๊ฐ์ธ๊ณ ์๋ ํ๋น์ด ๋น๋๋ ๋ฏํ๋ค. ๊ทธ์ ์ผ๊ตด์๋ ๋๋ฐฉ์ธ์ด ๊ตด๋ฌ ๋ด๋ ค๊ฐ๋ฉฐ, ๊ทธ์ ์
์ ๋งํ ์ค๋น๋ฅผ ํ๊ณ ์์๋ค.
"์ฌ๊ด ์ฃผ์ธ๋, ์ ๋ฅผ ๋ฐ์์ฃผ์ค ์ ์์๊น์? ์ ๊ฐ ์ด๊ณณ์์ ์ ์ ์ฌ๊ณ ์ถ์ต๋๋ค." ๊ทธ์ ๋ชฉ์๋ฆฌ๋ ์ฌ๋ง์ ๋ฌด๋ํ ์กฐ์ฉํจ์ ๊นจ์ฐ๋ฉฐ ์ ํด์ก๋ค.
์ฌ๊ด ์ฃผ์ธ์ ๊ทธ์ ์ฒด์ก๋ณต๊ณผ ๋ๆฑๆฑํ ๋ชจ์ต์ ๋ณด๋ฉฐ, ์ด ์ฌ๋ด์ ์ํฉ์ ๋ํด ๊ฑฑ์ ์ค๋ฌ์ ๋ค. "๊ทธ๋, ๋ค๊ฐ ํ์ํ๋ค๊ณ ๋๊ผ๋ค๋ฉด, ์ฌ๊ธฐ์ ์ฌ์ด๋ผ. ํ์ง๋ง ์ ์ด๋ฐ ๊ณณ๊น์ง ์๋์ง ์ค๋ช
ํด ์ค์ผ ํ ๊ฒ ๊ฐ์." ๊ทธ๋
์ ๋งํฌ๋ ์น๊ทผํ๋ฉด์๋ ๋ถ๋ช
ํ ์ง์์๋ค.
base_model: Qwen/Qwen2-7B-Instruct
trust_remote_code: true
load_in_8bit: false
load_in_4bit: false
strict: false
datasets:
- path: train_data.jsonl
type: sharegpt
dataset_prepared_path:
val_set_size: 0.05
output_dir: ./outputs/out
sequence_len: 4096
sample_packing: true
eval_sample_packing: true
pad_to_sequence_len: true
adapter: lora
lora_model_dir:
lora_r: 32
lora_alpha: 128
lora_dropout: 0.05
lora_target_linear: true
lora_fan_in_fan_out:
wandb_project:
wandb_entity:
wandb_watch:
wandb_name:
wandb_log_model:
neftune_noise_alpha: 5
gradient_accumulation_steps: 4
micro_batch_size: 2
num_epochs: 3
optimizer: adamw_torch
lr_scheduler: cosine
learning_rate: 0.0002
train_on_inputs: false
group_by_length: false
bf16: auto
fp16:
tf32: false
gradient_checkpointing: true
gradient_checkpointing_kwargs:
use_reentrant: false
early_stopping_patience:
resume_from_checkpoint:
local_rank:
logging_steps: 1
xformers_attention:
flash_attention: true
warmup_steps: 10
evals_per_epoch: 4
saves_per_epoch: 1
debug:
deepspeed:
weight_decay: 0.0
fsdp:
special_tokens: