Update README.md
Browse files
README.md
CHANGED
@@ -14,20 +14,18 @@ license: apache-2.0
|
|
14 |
|
15 |
代码部分在:https://github.com/ViperEkura/KHAOSZ/tree/main
|
16 |
|
17 |
-
|
|
|
|
|
18 |
|
19 |
-
|
20 |
-
- **性能优化**:代码中设置了`dtype=torch.bfloat16`来启用训练,这有助于提高训练速度和降低显存消耗,但需确保硬件支持此特性。
|
21 |
-
- **语言支持**:该模型目前支持在中文和英文数据集上训练, 在训练分词器时没有加入其他语言的文本,BBPE分词器不会存在OOV问题,但是对别的语言支持比较差
|
22 |
-
|
23 |
-
### 1. 如何训练
|
24 |
|
25 |
要训练这个Transformer模型,您可以按照以下步骤进行操作:
|
26 |
|
27 |
(1). 准备数据集:
|
28 |
|
29 |
确保您的数据集位于一个指定的根目录下。数据集应包含用于训练的文本文件,这些文件可以是中文、英文或两者混合。
|
30 |
-
数据文件的格式应与模型的输入要求一致,最好是经过tokenizer处理过后的token_id
|
31 |
|
32 |
(2).安装依赖:
|
33 |
|
@@ -43,6 +41,7 @@ conda env create -f environment.yml --name env_name
|
|
43 |
|
44 |
```bash
|
45 |
python train.py \
|
|
|
46 |
--data_root_path=/path/to/dataset \
|
47 |
--n_epoch=5 \
|
48 |
--batch_size=8 \
|
@@ -50,6 +49,7 @@ python train.py \
|
|
50 |
--n_iter_ckpt=10000 \
|
51 |
--ckpt_dir checkpoints
|
52 |
```
|
|
|
53 |
|
54 |
--data_root_path:指定数据集的根目录路径。
|
55 |
|
@@ -73,7 +73,7 @@ python train.py \
|
|
73 |
检查点文件会保存在指定的检查点目录中,您可以使用这些检查点文件来恢复训练或进行评估。
|
74 |
|
75 |
|
76 |
-
|
77 |
如果您想使用这个模型进行对话聊天, 请打开 chat.py 文件,并运行它。
|
78 |
或者, 您可以使用流式输出接口/对话生成接口完成对话
|
79 |
|
@@ -93,12 +93,12 @@ while True:
|
|
93 |
for response, histroy in model.stream_generate(
|
94 |
query=query,
|
95 |
history=histroy,
|
96 |
-
temperature=0.
|
97 |
-
top_p=0.
|
|
|
98 |
):
|
99 |
print(response[response_size:], end="")
|
100 |
response_size = len(response)
|
101 |
-
print()
|
102 |
|
103 |
```
|
104 |
|
@@ -120,13 +120,14 @@ while True:
|
|
120 |
response = model.generate(
|
121 |
query=query,
|
122 |
history=histroy,
|
123 |
-
temperature=0.
|
124 |
-
top_p=0.
|
|
|
125 |
)
|
126 |
print(response)
|
127 |
```
|
128 |
|
129 |
-
|
130 |
本模型基于20层的transformer,参数大致设置如`config.json`,参数大小为4亿(0.40b)
|
131 |
|
132 |
模型采用权重绑定, embedding层的权重和最后线性层的权重是共享的(比较小的模型都采用这种方式节省参数大小, 因为不采用权重绑定, embedding层假设有10000单词, 将会占用 10000 * 1024 = 102,400,000 参数, 也就是 0.1b 参数, 因为词表会占用太多的参数, 所以采用权重绑定是小模型的通用方法)
|
|
|
14 |
|
15 |
代码部分在:https://github.com/ViperEkura/KHAOSZ/tree/main
|
16 |
|
17 |
+
- **📊设备选择**:当前代码默认使用CUDA进行训练
|
18 |
+
- **🌐性能优化**:代码中设置了`dtype=torch.bfloat16`来启用训练,这有助于提高训练速度和降低显存消耗,但需确保硬件支持此特性。
|
19 |
+
- **🤖语言支持**:该模型目前支持在中文和英文数据集上训练, 在训练分词器时没有加入其他语言的文本,BBPE分词器不会存在OOV问题,但是对别的语言支持比较差
|
20 |
|
21 |
+
## 📌如何训练
|
|
|
|
|
|
|
|
|
22 |
|
23 |
要训练这个Transformer模型,您可以按照以下步骤进行操作:
|
24 |
|
25 |
(1). 准备数据集:
|
26 |
|
27 |
确保您的数据集位于一个指定的根目录下。数据集应包含用于训练的文本文件,这些文件可以是中文、英文或两者混合。
|
28 |
+
数据文件的格式应与模型的输入要求一致,最好是经过tokenizer处理过后的token_id, 为了节省内存占用采用torch.Tensor 存储id,(如果使用python的list, 在读取训练数据的时候内存占用大概是原来的两倍以上,因为python似乎是默认采用64位数精度存储的数据, 但是实际上int32足够)
|
29 |
|
30 |
(2).安装依赖:
|
31 |
|
|
|
41 |
|
42 |
```bash
|
43 |
python train.py \
|
44 |
+
--train_type=train_type[seq, sft, dpo] \
|
45 |
--data_root_path=/path/to/dataset \
|
46 |
--n_epoch=5 \
|
47 |
--batch_size=8 \
|
|
|
49 |
--n_iter_ckpt=10000 \
|
50 |
--ckpt_dir checkpoints
|
51 |
```
|
52 |
+
--train_type: 指定训练的类型,可选值有seq, sft, dpo
|
53 |
|
54 |
--data_root_path:指定数据集的根目录路径。
|
55 |
|
|
|
73 |
检查点文件会保存在指定的检查点目录中,您可以使用这些检查点文件来恢复训练或进行评估。
|
74 |
|
75 |
|
76 |
+
## 👉如何使用
|
77 |
如果您想使用这个模型进行对话聊天, 请打开 chat.py 文件,并运行它。
|
78 |
或者, 您可以使用流式输出接口/对话生成接口完成对话
|
79 |
|
|
|
93 |
for response, histroy in model.stream_generate(
|
94 |
query=query,
|
95 |
history=histroy,
|
96 |
+
temperature=0.85,
|
97 |
+
top_p=0.95,
|
98 |
+
top_k=50
|
99 |
):
|
100 |
print(response[response_size:], end="")
|
101 |
response_size = len(response)
|
|
|
102 |
|
103 |
```
|
104 |
|
|
|
120 |
response = model.generate(
|
121 |
query=query,
|
122 |
history=histroy,
|
123 |
+
temperature=0.85,
|
124 |
+
top_p=0.95,
|
125 |
+
top_k=50
|
126 |
)
|
127 |
print(response)
|
128 |
```
|
129 |
|
130 |
+
## 📌其他问题
|
131 |
本模型基于20层的transformer,参数大致设置如`config.json`,参数大小为4亿(0.40b)
|
132 |
|
133 |
模型采用权重绑定, embedding层的权重和最后线性层的权重是共享的(比较小的模型都采用这种方式节省参数大小, 因为不采用权重绑定, embedding层假设有10000单词, 将会占用 10000 * 1024 = 102,400,000 参数, 也就是 0.1b 参数, 因为词表会占用太多的参数, 所以采用权重绑定是小模型的通用方法)
|