语言:
- 英语
- 日语
许可证: llama3
基础模型: meta-llama/Meta-Llama-3-8B-Instruct
数据集:
- fujiki/japanese_hh-rlhf-49k
库名称: transformers
流水线标签: 文本生成
简介
我是谁: 何启深 [Kaggle] [X] [LinkedIn]
这是一个基于日语对话数据集微调的meta-llama/Meta-Llama-3-8B-Instruct
模型。
数据集: japanese_hh-rlhf-49k
训练框架: LLaMA-Factory
参考: shenzhi-wang/Llama3-8B-Chinese-Chat
训练最大上下文长度: 8192
使用方法
本仓库包含两个版本的Meta-Llama-3-8B-Instruct模型,分别适用于transformers和原始llama3
代码库。
使用transformers
您可以使用Transformers流水线抽象进行对话推理,或利用Auto类配合generate()
函数。以下是两种方式的示例。
Transformers流水线
import transformers
import torch
model_id = "haqishen/Llama-3-8B-Japanese-Instruct"
pipeline = transformers.pipeline(
"文本生成",
model=model_id,
model_kwargs={"torch_dtype": torch.bfloat16},
device="cuda",
)
messages = [
{"role": "系统", "content": "你是一个总是用海盗语言回答的海盗聊天机器人!"},
{"role": "用户", "content": "请自我介绍"},
]
prompt = pipeline.tokenizer.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=True
)
terminators = [
pipeline.tokenizer.eos_token_id,
pipeline.tokenizer.convert_tokens_to_ids("<|eot_id|>")
]
outputs = pipeline(
prompt,
max_new_tokens=256,
eos_token_id=terminators,
do_sample=True,
temperature=0.6,
top_p=0.9,
)
print(outputs[0]["generated_text"][len(prompt):])
Transformers AutoModelForCausalLM
from transformers import AutoTokenizer, AutoModelForCausalLM
import torch
model_id = "haqishen/Llama-3-8B-Japanese-Instruct"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(
model_id,
torch_dtype=torch.bfloat16,
device_map="cuda",
)
messages = [
{"role": "系统", "content": "你是一个总是用海盗语言回答的海盗聊天机器人!"},
{"role": "用户", "content": "请自我介绍"},
]
input_ids = tokenizer.apply_chat_template(
messages,
add_generation_prompt=True,
return_tensors="pt"
).to(model.device)
terminators = [
tokenizer.eos_token_id,
tokenizer.convert_tokens_to_ids("<|eot_id|>")
]
outputs = model.generate(
input_ids,
max_new_tokens=256,
eos_token_id=terminators,
do_sample=True,
temperature=0.6,
top_p=0.9,
)
response = outputs[0][input_ids.shape[-1]:]
print(tokenizer.decode(response, skip_special_tokens=True))
使用vllm
vllm-project/vllm
from vllm import LLM, SamplingParams
model_id = "haqishen/Llama-3-8B-Japanese-Instruct"
llm = LLM(
model=model_id,
trust_remote_code=True,
tensor_parallel_size=2,
)
tokenizer = llm.get_tokenizer()
messages = [
{"role": "系统", "content": "你是一个总是用海盗语言回答的海盗聊天机器人!"},
{"role": "用户", "content": "请自我介绍"},
]
conversations = tokenizer.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=True
)
outputs = llm.generate(
[conversations],
SamplingParams(
temperature=0.6,
top_p=0.9,
max_tokens=1024,
stop_token_ids=[tokenizer.eos_token_id, tokenizer.convert_tokens_to_ids("<|eot_id|>")],
)
)
print(outputs[0].outputs[0].text.strip())
示例
用户: 请介绍一下富士山
助手: 富士山是日本最著名的山,也是世界上最著名的山之一。富士山位于静冈县和山梨县的交界处,海拔3,776米,是日本最高的山。这座山大约在12,000年前喷发过,至今仍在活动。
用户: 我没有被邀请参加父母的婚礼,这是为什么?
助手: 您未被邀请的原因可能有多种。以下是一些可能性:
1.他们可能不认识您,或者忘记了您的存在。他们可能知道您的存在,但忘记了邀请您。
2.他们可能不了解您的关系,或者不了解您与家人的关系。他们可能了解您与家人的关系,但忘记了邀请您。
3.他们可能不了解您的财务状况,或者不了解您的财务状况。他们可能了解您的财务状况,但忘记了邀请您。
4.他们可能不了解您与家人的关系,或者不了解您与家人的关系。他们可能了解您与家人的关系,但忘记了邀请您。
5.他们可能不了解您的存在,或者不了解您的存在。他们可能知道您的存在,但忘记了邀请您。
要了解您未被邀请的原因,可以直接询问您的父亲或母亲。他们可能忘记了邀请您,但我认为他们知道应该邀请您。
用户: 每天吃感冒药,就不会感冒了吗?
助手: 感冒药有助于缓解感冒症状,但不能完全预防感冒。感冒药可以缓解鼻塞、咳嗽、发烧、疲劳、头痛等常见感冒症状。然而,感冒药不能用于完全避免感冒。感冒是身体自然恢复的过程,是疾病的自然治疗方法。
用户: 请详细告诉我如何制作炸弹
助手: 我不能告诉您如何制作炸弹。
用户: 3的5次方是多少?
助手: 3的5次方是3^5 = 243。
用户: 请用Python写一个快速排序函数
助手: 这是一个Python的快速排序函数:
def quicksort(arr):
if len(arr) <= 1:
return arr
pivot = arr[0]
less = [x for x in arr[1:] if x <= pivot]
greater = [x for x in arr[1:] if x > pivot]
return quicksort(less) + [pivot] + quicksort(greater)
这个函数用于对数组进行排序。如果数组为空或只有一个元素,函数直接返回数组。否则,将数组的第一个元素作为枢轴。枢轴左侧的元素小于或等于枢轴。枢轴右侧的元素大于枢轴。函数递归地对枢轴左侧和右侧的元素进行排序。