Skip to content

Commit eca55f5

Browse files
authored
feat: support Model Yuan2.0, a new generation Fundamental Large Language Model developed by IEIT System (#2936)
1 parent 7c1b7dd commit eca55f5

File tree

4 files changed

+76
-2
lines changed

4 files changed

+76
-2
lines changed

docs/model_support.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,10 @@
6262
- [WizardLM/WizardCoder-15B-V1.0](https://huggingface.co/WizardLM/WizardCoder-15B-V1.0)
6363
- [Xwin-LM/Xwin-LM-7B-V0.1](https://huggingface.co/Xwin-LM/Xwin-LM-70B-V0.1)
6464
- [IEITYuan/Yuan2-2B/51B/102B-hf](https://huggingface.co/IEITYuan)
65+
- [IEITYuan/Yuan2-2B-Janus-hf](https://huggingface.co/IEITYuan/Yuan2-2B-Janus-hf)
66+
- [IEITYuan/Yuan2-2B-hf](https://huggingface.co/IEITYuan/Yuan2-2B-hf)
67+
- [IEITYuan/Yuan2-51B-hf](https://huggingface.co/IEITYuan/Yuan2-51B-hf)
68+
- [IEITYuan/Yuan2-102B-hf](https://huggingface.co/IEITYuan/Yuan2-102B-hf)
6569
- Any [EleutherAI](https://huggingface.co/EleutherAI) pythia model such as [pythia-6.9b](https://huggingface.co/EleutherAI/pythia-6.9b)
6670
- Any [Peft](https://github.com/huggingface/peft) adapter trained on top of a
6771
model above. To activate, must have `peft` in the model path. Note: If

fastchat/conversation.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ class SeparatorStyle(IntEnum):
3131
CHATGLM3 = auto()
3232
DEEPSEEK_CHAT = auto()
3333
METAMATH = auto()
34+
YUAN2 = auto()
3435

3536

3637
@dataclasses.dataclass
@@ -245,6 +246,18 @@ def get_prompt(self) -> str:
245246
else:
246247
ret += role + ":"
247248
return ret
249+
elif self.sep_style == SeparatorStyle.YUAN2:
250+
seps = [self.sep, self.sep2]
251+
ret = ""
252+
if self.system_message:
253+
ret += system_prompt + seps[1]
254+
for _, message in self.messages:
255+
if message:
256+
ret += message + '<n>'
257+
else:
258+
ret += ""
259+
ret = ret.rstrip('<n>') + seps[0]
260+
return ret
248261
else:
249262
raise ValueError(f"Invalid style: {self.sep_style}")
250263

@@ -1420,6 +1433,22 @@ def get_conv_template(name: str) -> Conversation:
14201433
)
14211434
)
14221435

1436+
# Yuan2.0 chat template
1437+
# source: https://huggingface.co/IEITYuan/Yuan2-2B-Janus-hf/blob/main/tokenizer_config.json#L6
1438+
register_conv_template(
1439+
Conversation(
1440+
name="yuan2",
1441+
roles=("user", "assistant"),
1442+
sep_style=SeparatorStyle.YUAN2,
1443+
sep="<sep>",
1444+
sep2="\n",
1445+
stop_token_ids=[
1446+
77185,
1447+
], # "<eod>"
1448+
stop_str="<eod>",
1449+
)
1450+
)
1451+
14231452
# Solar-10.7B Chat Template
14241453
# Reference: https://huggingface.co/upstage/SOLAR-10.7B-Instruct-v1.0/blob/main/tokenizer_config.json
14251454
register_conv_template(

fastchat/model/model_adapter.py

Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2101,6 +2101,40 @@ def match(self, model_path: str):
21012101
def get_default_conv_template(self, model_path: str) -> Conversation:
21022102
return get_conv_template("deepseek-chat")
21032103

2104+
class Yuan2Adapter(BaseModelAdapter):
2105+
"""The model adapter for Yuan2.0"""
2106+
2107+
def match(self, model_path: str):
2108+
return "yuan2" in model_path.lower()
2109+
2110+
def load_model(self, model_path: str, from_pretrained_kwargs: dict):
2111+
revision = from_pretrained_kwargs.get("revision", "main")
2112+
# from_pretrained_kwargs["torch_dtype"] = torch.bfloat16
2113+
tokenizer = LlamaTokenizer.from_pretrained(
2114+
model_path,
2115+
add_eos_token=False,
2116+
add_bos_token=False,
2117+
eos_token='<eod>',
2118+
eod_token='<eod>',
2119+
sep_token='<sep>',
2120+
revision = revision,
2121+
)
2122+
tokenizer.add_tokens(
2123+
['<sep>', '<pad>', '<mask>', '<predict>', '<FIM_SUFFIX>', '<FIM_PREFIX>', '<FIM_MIDDLE>', '<commit_before>',
2124+
'<commit_msg>', '<commit_after>', '<jupyter_start>', '<jupyter_text>', '<jupyter_code>',
2125+
'<jupyter_output>', '<empty_output>'], special_tokens=True)
2126+
2127+
model = AutoModelForCausalLM.from_pretrained(
2128+
model_path,
2129+
# device_map='auto',
2130+
trust_remote_code=True,
2131+
**from_pretrained_kwargs
2132+
)
2133+
return model, tokenizer
2134+
2135+
def get_default_conv_template(self, model_path: str) -> Conversation:
2136+
return get_conv_template("yuan2")
2137+
21042138

21052139
class MetaMathAdapter(BaseModelAdapter):
21062140
"""The model adapter for MetaMath models"""
@@ -2132,7 +2166,7 @@ def get_default_conv_template(self, model_path: str) -> Conversation:
21322166
return get_conv_template("solar")
21332167

21342168

2135-
class Yuan2Adapter(BaseModelAdapter):
2169+
class YuanAdapter(BaseModelAdapter):
21362170
"""The model adapter for Yuan"""
21372171

21382172
def match(self, model_path: str):
@@ -2248,10 +2282,11 @@ def get_default_conv_template(self, model_path: str) -> Conversation:
22482282
register_model_adapter(PplxAIAdapter)
22492283
register_model_adapter(DeepseekCoderAdapter)
22502284
register_model_adapter(DeepseekChatAdapter)
2285+
register_model_adapter(Yuan2Adapter)
22512286
register_model_adapter(MetaMathAdapter)
22522287
register_model_adapter(BagelAdapter)
22532288
register_model_adapter(SolarAdapter)
2254-
register_model_adapter(Yuan2Adapter)
2289+
register_model_adapter(YuanAdapter)
22552290

22562291
# After all adapters, try the default base adapter.
22572292
register_model_adapter(BaseModelAdapter)

fastchat/model/model_registry.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,12 @@ def get_model_info(name: str) -> ModelInfo:
2727
name, "", "Register the description at fastchat/model/model_registry.py"
2828
)
2929

30+
register_model_info(
31+
["IEITYuan/Yuan2-2B-Janus-hf", "IEITYuan/Yuan2-2B-hf", "IEITYuan/Yuan2-51B-hf", "IEITYuan/Yuan2-102B-hf"],
32+
"IEIT-Yuan2",
33+
"https://github.com/IEIT-Yuan/Yuan-2.0",
34+
"Yuan2.0 is a new generation Fundamental Large Language Model developed by IEIT System.",
35+
)
3036

3137
register_model_info(
3238
["mixtral-8x7b-instruct-v0.1", "mistral-7b-instruct"],

0 commit comments

Comments
 (0)