update readme and fix convert_tokens_to_string
Browse files- README.md +5 -0
- modeling_qwen.py +1 -1
- tokenization_qwen.py +7 -9
README.md
CHANGED
@@ -61,11 +61,16 @@ We show an example of multi-turn interaction with Qwen-7B-Chat in the following
|
|
61 |
from transformers import AutoModelForCausalLM, AutoTokenizer
|
62 |
from transformers.generation import GenerationConfig
|
63 |
|
|
|
|
|
|
|
64 |
tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen-7B-Chat", trust_remote_code=True)
|
65 |
# use bf16
|
66 |
# model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen-7B-Chat", device_map="auto", trust_remote_code=True, bf16=True).eval()
|
67 |
# use fp16
|
68 |
# model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen-7B-Chat", device_map="auto", trust_remote_code=True, fp16=True).eval()
|
|
|
|
|
69 |
# use fp32
|
70 |
model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen-7B-Chat", device_map="auto", trust_remote_code=True).eval()
|
71 |
model.generation_config = GenerationConfig.from_pretrained("Qwen/Qwen-7B-Chat", trust_remote_code=True) # 可指定不同的生成长度、top_p等相关超参
|
|
|
61 |
from transformers import AutoModelForCausalLM, AutoTokenizer
|
62 |
from transformers.generation import GenerationConfig
|
63 |
|
64 |
+
# Note: our tokenizer rejects attacks and so that you cannot input special tokens like <|endoftext|> or it will throw an error.
|
65 |
+
# To remove the strategy, you can add `allowed_special`, which accepts the string "all" or a `set` of special tokens.
|
66 |
+
# For example: tokens = tokenizer(text, allowed_special="all")
|
67 |
tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen-7B-Chat", trust_remote_code=True)
|
68 |
# use bf16
|
69 |
# model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen-7B-Chat", device_map="auto", trust_remote_code=True, bf16=True).eval()
|
70 |
# use fp16
|
71 |
# model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen-7B-Chat", device_map="auto", trust_remote_code=True, fp16=True).eval()
|
72 |
+
# use cpu only
|
73 |
+
# model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen-7B-Chat", device_map="cpu", trust_remote_code=True).eval()
|
74 |
# use fp32
|
75 |
model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen-7B-Chat", device_map="auto", trust_remote_code=True).eval()
|
76 |
model.generation_config = GenerationConfig.from_pretrained("Qwen/Qwen-7B-Chat", trust_remote_code=True) # 可指定不同的生成长度、top_p等相关超参
|
modeling_qwen.py
CHANGED
@@ -1071,4 +1071,4 @@ class RMSNorm(torch.nn.Module):
|
|
1071 |
return rms_norm(x, self.weight, self.eps)
|
1072 |
else:
|
1073 |
output = self._norm(x.float()).type_as(x)
|
1074 |
-
return output * self.weight
|
|
|
1071 |
return rms_norm(x, self.weight, self.eps)
|
1072 |
else:
|
1073 |
output = self._norm(x.float()).type_as(x)
|
1074 |
+
return output * self.weight
|
tokenization_qwen.py
CHANGED
@@ -22,7 +22,6 @@ logger = logging.getLogger(__name__)
|
|
22 |
|
23 |
VOCAB_FILES_NAMES = {"vocab_file": "qwen.tiktoken"}
|
24 |
|
25 |
-
|
26 |
class QWenTokenizer(PreTrainedTokenizer):
|
27 |
"""QWen tokenizer."""
|
28 |
|
@@ -199,17 +198,16 @@ class QWenTokenizer(PreTrainedTokenizer):
|
|
199 |
|
200 |
return tokens
|
201 |
|
202 |
-
def convert_tokens_to_string(self, tokens: List[
|
203 |
"""
|
204 |
Converts a sequence of tokens in a single string. The most simple way to do it is `" ".join(tokens)` but we
|
205 |
often want to remove sub-word tokenization artifacts at the same time.
|
206 |
"""
|
207 |
-
text = ""
|
208 |
-
|
209 |
-
|
210 |
-
)
|
211 |
-
|
212 |
-
|
213 |
@property
|
214 |
def vocab_size(self):
|
215 |
return self.tokenizer.n_vocab
|
@@ -263,4 +261,4 @@ class QWenTokenizer(PreTrainedTokenizer):
|
|
263 |
token_ids = [token_ids]
|
264 |
if skip_special_tokens:
|
265 |
token_ids = [i for i in token_ids if i not in self.all_special_ids]
|
266 |
-
return self.tokenizer.decode(token_ids)
|
|
|
22 |
|
23 |
VOCAB_FILES_NAMES = {"vocab_file": "qwen.tiktoken"}
|
24 |
|
|
|
25 |
class QWenTokenizer(PreTrainedTokenizer):
|
26 |
"""QWen tokenizer."""
|
27 |
|
|
|
198 |
|
199 |
return tokens
|
200 |
|
201 |
+
def convert_tokens_to_string(self, tokens: List[bytes]) -> str:
|
202 |
"""
|
203 |
Converts a sequence of tokens in a single string. The most simple way to do it is `" ".join(tokens)` but we
|
204 |
often want to remove sub-word tokenization artifacts at the same time.
|
205 |
"""
|
206 |
+
text = b""
|
207 |
+
for token in tokens:
|
208 |
+
text += token
|
209 |
+
return text.decode('utf-8')
|
210 |
+
|
|
|
211 |
@property
|
212 |
def vocab_size(self):
|
213 |
return self.tokenizer.n_vocab
|
|
|
261 |
token_ids = [token_ids]
|
262 |
if skip_special_tokens:
|
263 |
token_ids = [i for i in token_ids if i not in self.all_special_ids]
|
264 |
+
return self.tokenizer.decode(token_ids)
|