Safetensors
Chinese
ViperEk commited on
Commit
96c9eeb
·
1 Parent(s): f48bec8

Update README.md

Browse files
Files changed (1) hide show
  1. README.md +118 -3
README.md CHANGED
@@ -1,3 +1,118 @@
1
- ---
2
- license: apache-2.0
3
- ---
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ## KHAOSZ
2
+
3
+ 这是一个支持中文和英文双语言的Transfomer模型,包含模型设置和训练流程, 通过加载`params/config.json` 中的设定的参数完成训练, 使用`train.py`解析命令行参数,包括数据集根目录、训练轮数、批处理大小、保存检查点的间隔轮数以及检查点保存目录。
4
+
5
+ - **设备选择**:当前代码默认使用CUDA进行训练
6
+ - **性能优化**:代码中设置了`dtype=torch.bfloat16`来启用混合精度训练,这有助于提高训练速度和降低显存消耗,但需确保硬件支持此特性。
7
+ - **语言支持**:该模型目前仅仅在中文数据集上训练, 因此通过英文对话可能出现问题, 但是训练tokenzier 的时候加入了英文文段, 也可以解码英文token
8
+
9
+ ### 1. 如何训练
10
+
11
+ 要训练这个Transformer模型,您可以按照以下步骤进行操作:
12
+
13
+ (1). 准备数据集:
14
+
15
+ 确保您的数据集位于一个指定的根目录下。数据集应包含用于训练的文本文件,这些文件可以是中文、英文或两者混合。
16
+ 数据文件的格式应与模型的输入要求一致,最好是经过tokenizer处理过后的token_id
17
+
18
+ (2).安装依赖:
19
+
20
+ 确保您已经安装了所有必要的Python库。根据代码中的导入语句,您需要安装以下库:
21
+
22
+ ```bash
23
+ pip install -r requirements.txt1
24
+ ```
25
+
26
+ (3).运行训练脚本:
27
+
28
+ 使用以下命令运行训练脚本,并根据需要调整参数:
29
+
30
+ ```bash
31
+ python train.py \
32
+ --data_root_path=/path/to/dataset \
33
+ --n_epoch=5 \
34
+ --batch_size=8 \
35
+ --max_lr=2e-4 \
36
+ --n_iter_ckpt=10000 \
37
+ --ckpt_dir checkpoints
38
+ ```
39
+
40
+ --data_root_path:指定数据集的根目录路径。
41
+
42
+ --n_epoch:指定训练的总轮数。
43
+
44
+ --batch_size:指定每个批次的样本数量。
45
+
46
+ --max_lr: 指定过程中最大的学习率(学习率采用的是预热 + 余弦衰减)
47
+
48
+ --n_iter_ckpt:指定每多少迭代次数保存一次检查点。
49
+
50
+ --ckpt_dir:指定保存检查点的目录。
51
+
52
+ --resume_train: 是否从检查点恢复训练
53
+
54
+ --resume_dir: 恢复训练的checkpoint路径
55
+
56
+ 训练过程中,您可以在终端中查看训练日志,了解训练进度、损失值等信息。
57
+ 检查点文件会保存在指定的检查点目录中,您可以使用这些检查点文件来恢复训练或进行评估。
58
+
59
+
60
+ ### 2. 如何使用
61
+ 如果您想使用这个模型进行对话聊天, 请打开 chat.py 文件,并运行它。
62
+ 或者, 您可以使用流式输出接口/对话生成接口完成对话
63
+
64
+ ```python
65
+ from module import Khaosz
66
+
67
+ model = Khaosz("params")
68
+ model = model.to(device='cuda', dtype=torch.bfloat16)
69
+ histroy = []
70
+
71
+ while True:
72
+ query = input(">> ")
73
+ if query == "!exit":
74
+ break
75
+
76
+ response_size = 0
77
+ for response, histroy in model.stream_generate(
78
+ query=query,
79
+ history=histroy,
80
+ temperature=1.0,
81
+ top_p=0.5
82
+ ):
83
+ print(response[response_size:], end="")
84
+ response_size = len(response)
85
+ print()
86
+
87
+ ```
88
+
89
+ 或者您可以使用非流式输出的方式完成对话
90
+
91
+ ```python
92
+ from module import Khaosz
93
+
94
+ model = Khaosz("params")
95
+ model = model.to(device='cuda', dtype=torch.bfloat16)
96
+ histroy = []
97
+
98
+ while True:
99
+ query = input(">> ")
100
+ if query == "!exit":
101
+ break
102
+
103
+ response_size = 0
104
+ response = model.generate(
105
+ query=query,
106
+ history=histroy,
107
+ temperature=1.0,
108
+ top_p=0.5
109
+ )
110
+ print(response)
111
+ ```
112
+
113
+ ### 其他问题
114
+ 本模型基于12层的transformer,参数大致设置如`config.json`,参数大小为2.6亿(0.26b)
115
+
116
+ 模型采用权重绑定, embedding层的权重和最后线性层的权重是共享的(比较小的模型都采用这种方式节省参数大小, 因为不采用权重绑定, embedding层假设有14000单词, 将会占用 14000 * 1024 = 143,200,000 参数 , 也就是 0.14b 参数, 因为词表会占用太多的参数, 所以采用权重绑定是小模型的通用方法)
117
+
118
+ 另外, 模型参数比较小, 生成速度快, 但是由于训练数据只使用了7gb 的中文数据集, 所以存在生成文段比较混乱的情况, 作为个聊天机器比较适合, 但是对于没有训练过的知识点,会存在胡言乱语的问题