自己动手本地部署LLM!

本文所述方法很可能受时效性影响。

运行环境

Key Value
CPU AMD Ryzen R9-5950X
GPU Nvidia RTX 2080Ti 22G
RAM 32G x 2 3200MHz
OS Windows 10 专业工作站版 22H2
Driver 537.58
CUDA 12.0
conda 4.10.3
Python 3.10.6
Pytorch 2.1.0

GPU魔改显存倍增前后使用方法并无区别。驱动会自动识别。

Windows下的尝试

由于某些众所周知的原因,安装步骤需要解决很多网络问题。本文不具体讨论这些细节。

开始之前

仓库地址: https://github.com/THUDM/CodeGeeX2

此后的步骤均在克隆下来的项目的目录进行。

安装PyTorch

此处假定你已开好了一个使用 Python 3.10 的conda环境。接下来所有操作都在该环境中进行。根据Pytorch官网提供的指令安装conda环境。

image-20231026113048412

1
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121

安装 requirements.txt 所涉及的依赖

1
pip install -r requirements.txt

YDJSIR这边遇到了一个特殊的问题。pip安装拉下来的代码似乎不是最新的,有一些Bug。可以手动更新对应的文件。参考链接:https://github.com/chatchat-space/Langchain-Chatchat/issues/1835

由于 20系 不支持 bf16,需要按照 README.md 中的指示,修改代码。

image-20231026120111505

安装 chatglm-cpp

请先安装Visual Studio 2022,社区版即可,也可以选择只安装其生成工具。实测VS 2017不行。参考链接:

https://blog.csdn.net/fanyingkk/article/details/131192374

而后,执行如下命令(PowerShell)。参考链接:https://github.com/li-plus/chatglm.cpp/issues/124

1
2
3
$env:TRACKFILEACCESS="false"
set "CMAKE_ARGS=-DGGML_CUBLAS=ON"
pip install chatglm-cpp

安装 fastllm

1
pip install fastllm

直接安装似乎不能直接启用,开fastllm还是会遇到exception,fallback到不启用fastllm的状态。Windows下自行编译的方式也不能用。

https://github.com/ztxz16/fastllm

gradio,启动!

运行项目中的 demo/run_demo.py。首次执行会从HuggingFaces拉模型,耗时可能较久。启动后就可以在网页中愉快地体验 CodeGeex2 啦!

1
python ./demo/run_demo.py

--fastllm 参数目前似乎仍不可用。输了也是 disabled

带上 --chatglm-cpp 参数时,在Windows下需要用管理员模式运行仍会遇到文件权限问题。仍在研究中。

不带这两个参数可以启动,不过很慢。

1
2
3
4
5
6
7
8
9
(CodeGeeX2) PS F:\model\CodeGeeX2> python ./demo/run_demo.py                        
fastllm disabled.
Loading checkpoint shards: 100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 7/7 [00:04<00:00, 1.71it/s]
chatglm-cpp and fastllm not installed, using transformers.
Running on local URL: http://127.0.0.1:7861

To create a public link, set `share=True` in `launch()`.
Keyboard interruption in main thread... closing server.

WSL 2下的快速开始

开始之前

此处使用的是 WSL2,Windows 10 22H2专业工作站版操作系统。WSL2都能读Windows的文件了,之前克隆好的直接拿来用得了。所以,前面章节涉及的修改这里也是生效的。这里介绍下环境。WSL版本如下。

image-20231123002532989

在这个版本下,WSL调用GPU和带GUI的Linux应用都是可以用的。体验非常好。

image-20231123002707086

首先,让我们把WSL更到最新。请使用管理员模式进行。

1
2
wsl --shutdown
wsl --update

只要Windows和WSL版本都对,实际上在WSL中启用GPU并不是什么是难事。核心还是在WSL里面的操作。官方文档主要还是描述Windows段的操作。

https://learn.microsoft.com/en-us/windows/ai/directml/gpu-cuda-in-wsl

众所周知,WSL2的网络很独立。在这个特殊的网络环境下,很多东西都不太好搞。所以YDJSIR尽可能采取的都是在Windows下把文件搞好,再用WSL操作。在这里贴几个文档参考一下吧。YDJSIR实际操作的时候甚至是先打了一个驱动试试水再上的CUDA。

https://docs.nvidia.com/cuda/wsl-user-guide/index.html#getting-started-with-cuda-on-wsl

https://developer.nvidia.com/cuda-downloads?target_os=Linux&target_arch=x86_64&Distribution=WSL-Ubuntu&target_version=2.0&target_type=deb_local

image-20231123005400250

image-20231123005255220

image-20231123005314797

BTW,装到后期会发现缺一堆东西,比如说 unzip 什么的。WSL毕竟很精简。缺啥补啥就行。

安装Pytorch

和前面能有什么区别?

安装 requirement.txt 所涉及的依赖

和前面完全一样,但是有一个神奇的点,transformers版本要锁 4.33。详情参考如下链接。

https://huggingface.co/THUDM/chatglm2-6b/discussions/87

这个包单独装一下就好。

1
pip install transformers==4.33.0

安装 chatglm-cpp

WSL下直接安装,一次成功。测试了一下,如果用CPU跑的话(不带前面的参数),默认配置生成要40s左右,不过5950X只吃了一半。用上了显卡的话4s左右。

1
CMAKE_ARGS="-DGGML_CUBLAS=ON" pip install chatglm-cpp -i https://pypi.mirrors.ustc.edu.cn/simple/ --force-reinstall -v --no-cache

gradio,启动!

运行项目中的 demo/run_demo.py。首次执行会从HuggingFaces拉模型,耗时可能较久。YDJSIR选择直接从 https://huggingface.co/docs/huggingface_hub/v0.19.3/guides/download 把文件都拉下来(Git LFS方式),然后放到HuggingFace一开始默认下载的位置(详情参考 https://zhuanlan.zhihu.com/p/475260268)启动后就可以在网页中愉快地体验 CodeGeex2 啦!

1
python ./demo/run_demo.py --chatglm-cpp

--fastllm 参数目前似乎仍不可用。输了也是 disabled

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
(CodeGeex) ydjsir@YDJ-Z490UD:/mnt/f/model/CodeGeeX2$ python ./demo/run_demo.py --chatglm-cpp
fastllm disabled.
Using chatglm-cpp to improve performance
Loading checkpoint shards: 100%|█████████████████████████████████████████████████████████████| 7/7 [00:06<00:00, 1.08it/s]Processing model states: 100%|███████████████████████████████████████████████████████████| 199/199 [00:09<00:00, 21.84it/s]+---------------------------------------------------------------------+---------------------------+---------+
| name | shape | dtype |
|---------------------------------------------------------------------+---------------------------+---------|
| transformer.embedding.word_embeddings.weight | torch.Size([65024, 4096]) | F16 |
| transformer.encoder.layers.0.input_layernorm.weight | torch.Size([4096]) | F32 |
| transformer.encoder.layers.0.self_attention.query_key_value.weight | torch.Size([4608, 4096]) | F16 |
| transformer.encoder.layers.0.self_attention.query_key_value.bias | torch.Size([4608]) | F32 |
| transformer.encoder.layers.0.self_attention.dense.weight | torch.Size([4096, 4096]) | F16 |
| transformer.encoder.layers.0.post_attention_layernorm.weight | torch.Size([4096]) | F32 |
| transformer.encoder.layers.0.mlp.dense_h_to_4h.weight | torch.Size([27392, 4096]) | F16 |
| transformer.encoder.layers.0.mlp.dense_4h_to_h.weight | torch.Size([4096, 13696]) | F16 |
| transformer.encoder.layers.1.input_layernorm.weight | torch.Size([4096]) | F32 |
| transformer.encoder.layers.1.self_attention.query_key_value.weight | torch.Size([4608, 4096]) | F16 |
| transformer.encoder.layers.1.self_attention.query_key_value.bias | torch.Size([4608]) | F32 |
| transformer.encoder.layers.1.self_attention.dense.weight | torch.Size([4096, 4096]) | F16 |
| transformer.encoder.layers.1.post_attention_layernorm.weight | torch.Size([4096]) | F32 |
| transformer.encoder.layers.1.mlp.dense_h_to_4h.weight | torch.Size([27392, 4096]) | F16 |
| transformer.encoder.layers.1.mlp.dense_4h_to_h.weight | torch.Size([4096, 13696]) | F16 |
| transformer.encoder.layers.2.input_layernorm.weight | torch.Size([4096]) | F32 |
| transformer.encoder.layers.2.self_attention.query_key_value.weight | torch.Size([4608, 4096]) | F16 |
| transformer.encoder.layers.2.self_attention.query_key_value.bias | torch.Size([4608]) | F32 |
| transformer.encoder.layers.2.self_attention.dense.weight | torch.Size([4096, 4096]) | F16 |
| transformer.encoder.layers.2.post_attention_layernorm.weight | torch.Size([4096]) | F32 |
| transformer.encoder.layers.2.mlp.dense_h_to_4h.weight | torch.Size([27392, 4096]) | F16 |
| transformer.encoder.layers.2.mlp.dense_4h_to_h.weight | torch.Size([4096, 13696]) | F16 |
| transformer.encoder.layers.3.input_layernorm.weight | torch.Size([4096]) | F32 |
| transformer.encoder.layers.3.self_attention.query_key_value.weight | torch.Size([4608, 4096]) | F16 |
| transformer.encoder.layers.3.self_attention.query_key_value.bias | torch.Size([4608]) | F32 |
| transformer.encoder.layers.3.self_attention.dense.weight | torch.Size([4096, 4096]) | F16 |
| transformer.encoder.layers.3.post_attention_layernorm.weight | torch.Size([4096]) | F32 |
| transformer.encoder.layers.3.mlp.dense_h_to_4h.weight | torch.Size([27392, 4096]) | F16 |
| transformer.encoder.layers.3.mlp.dense_4h_to_h.weight | torch.Size([4096, 13696]) | F16 |
| transformer.encoder.layers.4.input_layernorm.weight | torch.Size([4096]) | F32 |
| transformer.encoder.layers.4.self_attention.query_key_value.weight | torch.Size([4608, 4096]) | F16 |
| transformer.encoder.layers.4.self_attention.query_key_value.bias | torch.Size([4608]) | F32 |
| transformer.encoder.layers.4.self_attention.dense.weight | torch.Size([4096, 4096]) | F16 |
| transformer.encoder.layers.4.post_attention_layernorm.weight | torch.Size([4096]) | F32 |
| transformer.encoder.layers.4.mlp.dense_h_to_4h.weight | torch.Size([27392, 4096]) | F16 |
| transformer.encoder.layers.4.mlp.dense_4h_to_h.weight | torch.Size([4096, 13696]) | F16 |
| transformer.encoder.layers.5.input_layernorm.weight | torch.Size([4096]) | F32 |
| transformer.encoder.layers.5.self_attention.query_key_value.weight | torch.Size([4608, 4096]) | F16 |
| transformer.encoder.layers.5.self_attention.query_key_value.bias | torch.Size([4608]) | F32 |
| transformer.encoder.layers.5.self_attention.dense.weight | torch.Size([4096, 4096]) | F16 |
| transformer.encoder.layers.5.post_attention_layernorm.weight | torch.Size([4096]) | F32 |
| transformer.encoder.layers.5.mlp.dense_h_to_4h.weight | torch.Size([27392, 4096]) | F16 |
| transformer.encoder.layers.5.mlp.dense_4h_to_h.weight | torch.Size([4096, 13696]) | F16 |
| transformer.encoder.layers.6.input_layernorm.weight | torch.Size([4096]) | F32 |
| transformer.encoder.layers.6.self_attention.query_key_value.weight | torch.Size([4608, 4096]) | F16 |
| transformer.encoder.layers.6.self_attention.query_key_value.bias | torch.Size([4608]) | F32 |
| transformer.encoder.layers.6.self_attention.dense.weight | torch.Size([4096, 4096]) | F16 |
| transformer.encoder.layers.6.post_attention_layernorm.weight | torch.Size([4096]) | F32 |
| transformer.encoder.layers.6.mlp.dense_h_to_4h.weight | torch.Size([27392, 4096]) | F16 |
| transformer.encoder.layers.6.mlp.dense_4h_to_h.weight | torch.Size([4096, 13696]) | F16 |
| transformer.encoder.layers.7.input_layernorm.weight | torch.Size([4096]) | F32 |
| transformer.encoder.layers.7.self_attention.query_key_value.weight | torch.Size([4608, 4096]) | F16 |
| transformer.encoder.layers.7.self_attention.query_key_value.bias | torch.Size([4608]) | F32 |
| transformer.encoder.layers.7.self_attention.dense.weight | torch.Size([4096, 4096]) | F16 |
| transformer.encoder.layers.7.post_attention_layernorm.weight | torch.Size([4096]) | F32 |
| transformer.encoder.layers.7.mlp.dense_h_to_4h.weight | torch.Size([27392, 4096]) | F16 |
| transformer.encoder.layers.7.mlp.dense_4h_to_h.weight | torch.Size([4096, 13696]) | F16 |
| transformer.encoder.layers.8.input_layernorm.weight | torch.Size([4096]) | F32 |
| transformer.encoder.layers.8.self_attention.query_key_value.weight | torch.Size([4608, 4096]) | F16 |
| transformer.encoder.layers.8.self_attention.query_key_value.bias | torch.Size([4608]) | F32 |
| transformer.encoder.layers.8.self_attention.dense.weight | torch.Size([4096, 4096]) | F16 |
| transformer.encoder.layers.8.post_attention_layernorm.weight | torch.Size([4096]) | F32 |
| transformer.encoder.layers.8.mlp.dense_h_to_4h.weight | torch.Size([27392, 4096]) | F16 |
| transformer.encoder.layers.8.mlp.dense_4h_to_h.weight | torch.Size([4096, 13696]) | F16 |
| transformer.encoder.layers.9.input_layernorm.weight | torch.Size([4096]) | F32 |
| transformer.encoder.layers.9.self_attention.query_key_value.weight | torch.Size([4608, 4096]) | F16 |
| transformer.encoder.layers.9.self_attention.query_key_value.bias | torch.Size([4608]) | F32 |
| transformer.encoder.layers.9.self_attention.dense.weight | torch.Size([4096, 4096]) | F16 |
| transformer.encoder.layers.9.post_attention_layernorm.weight | torch.Size([4096]) | F32 |
| transformer.encoder.layers.9.mlp.dense_h_to_4h.weight | torch.Size([27392, 4096]) | F16 |
| transformer.encoder.layers.9.mlp.dense_4h_to_h.weight | torch.Size([4096, 13696]) | F16 |
| transformer.encoder.layers.10.input_layernorm.weight | torch.Size([4096]) | F32 |
| transformer.encoder.layers.10.self_attention.query_key_value.weight | torch.Size([4608, 4096]) | F16 |
| transformer.encoder.layers.10.self_attention.query_key_value.bias | torch.Size([4608]) | F32 |
| transformer.encoder.layers.10.self_attention.dense.weight | torch.Size([4096, 4096]) | F16 |
| transformer.encoder.layers.10.post_attention_layernorm.weight | torch.Size([4096]) | F32 |
| transformer.encoder.layers.10.mlp.dense_h_to_4h.weight | torch.Size([27392, 4096]) | F16 |
| transformer.encoder.layers.10.mlp.dense_4h_to_h.weight | torch.Size([4096, 13696]) | F16 |
| transformer.encoder.layers.11.input_layernorm.weight | torch.Size([4096]) | F32 |
| transformer.encoder.layers.11.self_attention.query_key_value.weight | torch.Size([4608, 4096]) | F16 |
| transformer.encoder.layers.11.self_attention.query_key_value.bias | torch.Size([4608]) | F32 |
| transformer.encoder.layers.11.self_attention.dense.weight | torch.Size([4096, 4096]) | F16 |
| transformer.encoder.layers.11.post_attention_layernorm.weight | torch.Size([4096]) | F32 |
| transformer.encoder.layers.11.mlp.dense_h_to_4h.weight | torch.Size([27392, 4096]) | F16 |
| transformer.encoder.layers.11.mlp.dense_4h_to_h.weight | torch.Size([4096, 13696]) | F16 |
| transformer.encoder.layers.12.input_layernorm.weight | torch.Size([4096]) | F32 |
| transformer.encoder.layers.12.self_attention.query_key_value.weight | torch.Size([4608, 4096]) | F16 |
| transformer.encoder.layers.12.self_attention.query_key_value.bias | torch.Size([4608]) | F32 |
| transformer.encoder.layers.12.self_attention.dense.weight | torch.Size([4096, 4096]) | F16 |
| transformer.encoder.layers.12.post_attention_layernorm.weight | torch.Size([4096]) | F32 |
| transformer.encoder.layers.12.mlp.dense_h_to_4h.weight | torch.Size([27392, 4096]) | F16 |
| transformer.encoder.layers.12.mlp.dense_4h_to_h.weight | torch.Size([4096, 13696]) | F16 |
| transformer.encoder.layers.13.input_layernorm.weight | torch.Size([4096]) | F32 |
| transformer.encoder.layers.13.self_attention.query_key_value.weight | torch.Size([4608, 4096]) | F16 |
| transformer.encoder.layers.13.self_attention.query_key_value.bias | torch.Size([4608]) | F32 |
| transformer.encoder.layers.13.self_attention.dense.weight | torch.Size([4096, 4096]) | F16 |
| transformer.encoder.layers.13.post_attention_layernorm.weight | torch.Size([4096]) | F32 |
| transformer.encoder.layers.13.mlp.dense_h_to_4h.weight | torch.Size([27392, 4096]) | F16 |
| transformer.encoder.layers.13.mlp.dense_4h_to_h.weight | torch.Size([4096, 13696]) | F16 |
| transformer.encoder.layers.14.input_layernorm.weight | torch.Size([4096]) | F32 |
| transformer.encoder.layers.14.self_attention.query_key_value.weight | torch.Size([4608, 4096]) | F16 |
| transformer.encoder.layers.14.self_attention.query_key_value.bias | torch.Size([4608]) | F32 |
| transformer.encoder.layers.14.self_attention.dense.weight | torch.Size([4096, 4096]) | F16 |
| transformer.encoder.layers.14.post_attention_layernorm.weight | torch.Size([4096]) | F32 |
| transformer.encoder.layers.14.mlp.dense_h_to_4h.weight | torch.Size([27392, 4096]) | F16 |
| transformer.encoder.layers.14.mlp.dense_4h_to_h.weight | torch.Size([4096, 13696]) | F16 |
| transformer.encoder.layers.15.input_layernorm.weight | torch.Size([4096]) | F32 |
| transformer.encoder.layers.15.self_attention.query_key_value.weight | torch.Size([4608, 4096]) | F16 |
| transformer.encoder.layers.15.self_attention.query_key_value.bias | torch.Size([4608]) | F32 |
| transformer.encoder.layers.15.self_attention.dense.weight | torch.Size([4096, 4096]) | F16 |
| transformer.encoder.layers.15.post_attention_layernorm.weight | torch.Size([4096]) | F32 |
| transformer.encoder.layers.15.mlp.dense_h_to_4h.weight | torch.Size([27392, 4096]) | F16 |
| transformer.encoder.layers.15.mlp.dense_4h_to_h.weight | torch.Size([4096, 13696]) | F16 |
| transformer.encoder.layers.16.input_layernorm.weight | torch.Size([4096]) | F32 |
| transformer.encoder.layers.16.self_attention.query_key_value.weight | torch.Size([4608, 4096]) | F16 |
| transformer.encoder.layers.16.self_attention.query_key_value.bias | torch.Size([4608]) | F32 |
| transformer.encoder.layers.16.self_attention.dense.weight | torch.Size([4096, 4096]) | F16 |
| transformer.encoder.layers.16.post_attention_layernorm.weight | torch.Size([4096]) | F32 |
| transformer.encoder.layers.16.mlp.dense_h_to_4h.weight | torch.Size([27392, 4096]) | F16 |
| transformer.encoder.layers.16.mlp.dense_4h_to_h.weight | torch.Size([4096, 13696]) | F16 |
| transformer.encoder.layers.17.input_layernorm.weight | torch.Size([4096]) | F32 |
| transformer.encoder.layers.17.self_attention.query_key_value.weight | torch.Size([4608, 4096]) | F16 |
| transformer.encoder.layers.17.self_attention.query_key_value.bias | torch.Size([4608]) | F32 |
| transformer.encoder.layers.17.self_attention.dense.weight | torch.Size([4096, 4096]) | F16 |
| transformer.encoder.layers.17.post_attention_layernorm.weight | torch.Size([4096]) | F32 |
| transformer.encoder.layers.17.mlp.dense_h_to_4h.weight | torch.Size([27392, 4096]) | F16 |
| transformer.encoder.layers.17.mlp.dense_4h_to_h.weight | torch.Size([4096, 13696]) | F16 |
| transformer.encoder.layers.18.input_layernorm.weight | torch.Size([4096]) | F32 |
| transformer.encoder.layers.18.self_attention.query_key_value.weight | torch.Size([4608, 4096]) | F16 |
| transformer.encoder.layers.18.self_attention.query_key_value.bias | torch.Size([4608]) | F32 |
| transformer.encoder.layers.18.self_attention.dense.weight | torch.Size([4096, 4096]) | F16 |
| transformer.encoder.layers.18.post_attention_layernorm.weight | torch.Size([4096]) | F32 |
| transformer.encoder.layers.18.mlp.dense_h_to_4h.weight | torch.Size([27392, 4096]) | F16 |
| transformer.encoder.layers.18.mlp.dense_4h_to_h.weight | torch.Size([4096, 13696]) | F16 |
| transformer.encoder.layers.19.input_layernorm.weight | torch.Size([4096]) | F32 |
| transformer.encoder.layers.19.self_attention.query_key_value.weight | torch.Size([4608, 4096]) | F16 |
| transformer.encoder.layers.19.self_attention.query_key_value.bias | torch.Size([4608]) | F32 |
| transformer.encoder.layers.19.self_attention.dense.weight | torch.Size([4096, 4096]) | F16 |
| transformer.encoder.layers.19.post_attention_layernorm.weight | torch.Size([4096]) | F32 |
| transformer.encoder.layers.19.mlp.dense_h_to_4h.weight | torch.Size([27392, 4096]) | F16 |
| transformer.encoder.layers.19.mlp.dense_4h_to_h.weight | torch.Size([4096, 13696]) | F16 |
| transformer.encoder.layers.20.input_layernorm.weight | torch.Size([4096]) | F32 |
| transformer.encoder.layers.20.self_attention.query_key_value.weight | torch.Size([4608, 4096]) | F16 |
| transformer.encoder.layers.20.self_attention.query_key_value.bias | torch.Size([4608]) | F32 |
| transformer.encoder.layers.20.self_attention.dense.weight | torch.Size([4096, 4096]) | F16 |
| transformer.encoder.layers.20.post_attention_layernorm.weight | torch.Size([4096]) | F32 |
| transformer.encoder.layers.20.mlp.dense_h_to_4h.weight | torch.Size([27392, 4096]) | F16 |
| transformer.encoder.layers.20.mlp.dense_4h_to_h.weight | torch.Size([4096, 13696]) | F16 |
| transformer.encoder.layers.21.input_layernorm.weight | torch.Size([4096]) | F32 |
| transformer.encoder.layers.21.self_attention.query_key_value.weight | torch.Size([4608, 4096]) | F16 |
| transformer.encoder.layers.21.self_attention.query_key_value.bias | torch.Size([4608]) | F32 |
| transformer.encoder.layers.21.self_attention.dense.weight | torch.Size([4096, 4096]) | F16 |
| transformer.encoder.layers.21.post_attention_layernorm.weight | torch.Size([4096]) | F32 |
| transformer.encoder.layers.21.mlp.dense_h_to_4h.weight | torch.Size([27392, 4096]) | F16 |
| transformer.encoder.layers.21.mlp.dense_4h_to_h.weight | torch.Size([4096, 13696]) | F16 |
| transformer.encoder.layers.22.input_layernorm.weight | torch.Size([4096]) | F32 |
| transformer.encoder.layers.22.self_attention.query_key_value.weight | torch.Size([4608, 4096]) | F16 |
| transformer.encoder.layers.22.self_attention.query_key_value.bias | torch.Size([4608]) | F32 |
| transformer.encoder.layers.22.self_attention.dense.weight | torch.Size([4096, 4096]) | F16 |
| transformer.encoder.layers.22.post_attention_layernorm.weight | torch.Size([4096]) | F32 |
| transformer.encoder.layers.22.mlp.dense_h_to_4h.weight | torch.Size([27392, 4096]) | F16 |
| transformer.encoder.layers.22.mlp.dense_4h_to_h.weight | torch.Size([4096, 13696]) | F16 |
| transformer.encoder.layers.23.input_layernorm.weight | torch.Size([4096]) | F32 |
| transformer.encoder.layers.23.self_attention.query_key_value.weight | torch.Size([4608, 4096]) | F16 |
| transformer.encoder.layers.23.self_attention.query_key_value.bias | torch.Size([4608]) | F32 |
| transformer.encoder.layers.23.self_attention.dense.weight | torch.Size([4096, 4096]) | F16 |
| transformer.encoder.layers.23.post_attention_layernorm.weight | torch.Size([4096]) | F32 |
| transformer.encoder.layers.23.mlp.dense_h_to_4h.weight | torch.Size([27392, 4096]) | F16 |
| transformer.encoder.layers.23.mlp.dense_4h_to_h.weight | torch.Size([4096, 13696]) | F16 |
| transformer.encoder.layers.24.input_layernorm.weight | torch.Size([4096]) | F32 |
| transformer.encoder.layers.24.self_attention.query_key_value.weight | torch.Size([4608, 4096]) | F16 |
| transformer.encoder.layers.24.self_attention.query_key_value.bias | torch.Size([4608]) | F32 |
| transformer.encoder.layers.24.self_attention.dense.weight | torch.Size([4096, 4096]) | F16 |
| transformer.encoder.layers.24.post_attention_layernorm.weight | torch.Size([4096]) | F32 |
| transformer.encoder.layers.24.mlp.dense_h_to_4h.weight | torch.Size([27392, 4096]) | F16 |
| transformer.encoder.layers.24.mlp.dense_4h_to_h.weight | torch.Size([4096, 13696]) | F16 |
| transformer.encoder.layers.25.input_layernorm.weight | torch.Size([4096]) | F32 |
| transformer.encoder.layers.25.self_attention.query_key_value.weight | torch.Size([4608, 4096]) | F16 |
| transformer.encoder.layers.25.self_attention.query_key_value.bias | torch.Size([4608]) | F32 |
| transformer.encoder.layers.25.self_attention.dense.weight | torch.Size([4096, 4096]) | F16 |
| transformer.encoder.layers.25.post_attention_layernorm.weight | torch.Size([4096]) | F32 |
| transformer.encoder.layers.25.mlp.dense_h_to_4h.weight | torch.Size([27392, 4096]) | F16 |
| transformer.encoder.layers.25.mlp.dense_4h_to_h.weight | torch.Size([4096, 13696]) | F16 |
| transformer.encoder.layers.26.input_layernorm.weight | torch.Size([4096]) | F32 |
| transformer.encoder.layers.26.self_attention.query_key_value.weight | torch.Size([4608, 4096]) | F16 |
| transformer.encoder.layers.26.self_attention.query_key_value.bias | torch.Size([4608]) | F32 |
| transformer.encoder.layers.26.self_attention.dense.weight | torch.Size([4096, 4096]) | F16 |
| transformer.encoder.layers.26.post_attention_layernorm.weight | torch.Size([4096]) | F32 |
| transformer.encoder.layers.26.mlp.dense_h_to_4h.weight | torch.Size([27392, 4096]) | F16 |
| transformer.encoder.layers.26.mlp.dense_4h_to_h.weight | torch.Size([4096, 13696]) | F16 |
| transformer.encoder.layers.27.input_layernorm.weight | torch.Size([4096]) | F32 |
| transformer.encoder.layers.27.self_attention.query_key_value.weight | torch.Size([4608, 4096]) | F16 |
| transformer.encoder.layers.27.self_attention.query_key_value.bias | torch.Size([4608]) | F32 |
| transformer.encoder.layers.27.self_attention.dense.weight | torch.Size([4096, 4096]) | F16 |
| transformer.encoder.layers.27.post_attention_layernorm.weight | torch.Size([4096]) | F32 |
| transformer.encoder.layers.27.mlp.dense_h_to_4h.weight | torch.Size([27392, 4096]) | F16 |
| transformer.encoder.layers.27.mlp.dense_4h_to_h.weight | torch.Size([4096, 13696]) | F16 |
| transformer.encoder.final_layernorm.weight | torch.Size([4096]) | F32 |
| transformer.output_layer.weight | torch.Size([65024, 4096]) | F16 |
+---------------------------------------------------------------------+---------------------------+---------+
ggml_init_cublas: found 1 CUDA devices:
Device 0: NVIDIA GeForce RTX 2080 Ti, compute capability 7.5
Running on local URL: http://0.0.0.0:7861

To create a public link, set `share=True` in `launch()`.

推理速度上个章节也说了,

感想与总结

WSL是神器!神器!能化腐朽为神奇!简直是Windows作为主力机开发时不可缺少的利器!以后学会了,项目都扔WSL里面跑!感谢M$和老黄!

这个模型好像并不太适合补全日志语句,没能达成YDJSIR的期望。但再怎么说,探索的经历还是很宝贵的。