-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.xml
More file actions
465 lines (399 loc) · 61 KB
/
Copy pathindex.xml
File metadata and controls
465 lines (399 loc) · 61 KB
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
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>跃入间隙 | voidreamy</title>
<link>http://localhost:1313/</link>
<description>Recent content on 跃入间隙 | voidreamy</description>
<generator>Hugo -- gohugo.io</generator>
<language>en</language>
<copyright>Example Person</copyright>
<lastBuildDate>Tue, 09 Apr 2024 22:44:04 +0800</lastBuildDate><atom:link href="http://localhost:1313/index.xml" rel="self" type="application/rss+xml" /><item>
<title>Docker部署Langchain-Chatchat</title>
<link>http://localhost:1313/p/docker%E9%83%A8%E7%BD%B2langchain-chatchat/</link>
<pubDate>Tue, 09 Apr 2024 22:44:04 +0800</pubDate>
<guid>http://localhost:1313/p/docker%E9%83%A8%E7%BD%B2langchain-chatchat/</guid>
<description><img src="http://localhost:1313/p/docker%E9%83%A8%E7%BD%B2langchain-chatchat/e9e3a5e09211f2b6940cc15ad5b0f04e.jpg" alt="Featured image of post Docker部署Langchain-Chatchat" /><p>这一系列博客记录用 docker 部署 <a class="link" href="https://github.com/chatchat-space/Langchain-Chatchat" target="_blank" rel="noopener"
>langchain-chatchat
<span style="white-space: nowrap;"><svg width=".7em"
height=".7em" viewBox="0 0 21 21" xmlns="http://www.w3.org/2000/svg">
<path d="m13 3l3.293 3.293l-7 7l1.414 1.414l7-7L21 11V3z" fill="currentColor" />
<path d="M19 19H5V5h7l-2-2H5c-1.103 0-2 .897-2 2v14c0 1.103.897 2 2 2h14c1.103 0 2-.897 2-2v-5l-2-2v7z"
fill="currentColor">
</svg></span>
</a> 本地知识库问答系统的全部过程,包括学习记录、踩坑经验、以及优化思路。</p>
<h2 id="langchain-chatchat项目介绍">Langchain-Chatchat项目介绍</h2>
<p>根据官网介绍:Langchain-Chatchat 是基于 ChatGLM 等大语言模型与 Langchain 等应用框架实现,开源、可离线部署的检索增强生成(RAG)大模型知识库项目。</p>
<p>这里的 RAG 技术是为了在避免花费巨大财力人力 fine-tuning 的情况下利用知识库提高大语言模型的准确率。RAG pipeline 如下图:</p>
<p><img src="http://localhost:1313/p/docker%E9%83%A8%E7%BD%B2langchain-chatchat/image.png"
width="2000"
height="969"
srcset="http://localhost:1313/p/docker%E9%83%A8%E7%BD%B2langchain-chatchat/image_hu87275b0869b3a3502fcfad91b731ea2e_163128_480x0_resize_box_3.png 480w, http://localhost:1313/p/docker%E9%83%A8%E7%BD%B2langchain-chatchat/image_hu87275b0869b3a3502fcfad91b731ea2e_163128_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="alt text"
class="gallery-image"
data-flex-grow="206"
data-flex-basis="495px"
></p>
<p>参考:https://docs.llamaindex.ai/en/stable/getting_started/concepts/</p>
<p>具体分析,RAG 核心技术可以分为:</p>
<ul>
<li><strong>Loading</strong></li>
<li><strong>Indexing</strong></li>
<li><strong>Storing</strong></li>
<li><strong>Querying</strong></li>
<li><strong>Evaluation</strong></li>
</ul>
<p>即:</p>
<p><img src="http://localhost:1313/p/docker%E9%83%A8%E7%BD%B2langchain-chatchat/image-1.png"
width="2000"
height="280"
srcset="http://localhost:1313/p/docker%E9%83%A8%E7%BD%B2langchain-chatchat/image-1_hu6c843e73134e2dcddf3e6098f2d16900_42227_480x0_resize_box_3.png 480w, http://localhost:1313/p/docker%E9%83%A8%E7%BD%B2langchain-chatchat/image-1_hu6c843e73134e2dcddf3e6098f2d16900_42227_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="alt text"
class="gallery-image"
data-flex-grow="714"
data-flex-basis="1714px"
></p>
<p>在 loading 阶段,structure data、unstructured data 或者 api output 被加载到统称为 document 的容器里;</p>
<p>indexing 阶段将 loading 阶段的 unstructured data 整理为 structured data 并将其向量化存储起来方便后续检索,即embedding data into vector store;</p>
<p>querying 阶段将根据 query 返回最合适的回答</p>
<p>我们后续分析 langchain-chatchat 项目代码会发现上述 RAG 技术的具体实现。本篇博客先记录 docker 部署过程。</p>
<h2 id="docker部署流程">Docker部署流程</h2>
<p>根据项目 <a class="link" href="https://github.com/chatchat-space/Langchain-Chatchat/wiki/%E5%BC%80%E5%8F%91%E7%8E%AF%E5%A2%83%E9%83%A8%E7%BD%B2#docker-%E9%83%A8%E7%BD%B2" target="_blank" rel="noopener"
>wiki
<span style="white-space: nowrap;"><svg width=".7em"
height=".7em" viewBox="0 0 21 21" xmlns="http://www.w3.org/2000/svg">
<path d="m13 3l3.293 3.293l-7 7l1.414 1.414l7-7L21 11V3z" fill="currentColor" />
<path d="M19 19H5V5h7l-2-2H5c-1.103 0-2 .897-2 2v14c0 1.103.897 2 2 2h14c1.103 0 2-.897 2-2v-5l-2-2v7z"
fill="currentColor">
</svg></span>
</a>,目前docker 镜像文件已经更新到 <code>0.2.10</code></p>
<ul>
<li>以 <code>nvidia/cuda:12.1.1-cudnn8-devel-ubuntu22.04</code> 为基础镜像</li>
<li>该版本内置并默认启用一个 Embedding 模型:<code>bge-large-zh-v1.5</code>,内置并默认启用 <code>ChatGLM3-6B</code></li>
</ul>
<p>部署该镜像需要提前安装对应的NVIDIA 驱动程序和 CUDA工具包。</p>
<ul>
<li><strong>NVIDIA Container Toolkit 安装指南</strong></li>
</ul>
<p><a class="link" href="https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html" target="_blank" rel="noopener"
>Installing the NVIDIA Container Toolkit — NVIDIA Container Toolkit 1.14.5 documentation
<span style="white-space: nowrap;"><svg width=".7em"
height=".7em" viewBox="0 0 21 21" xmlns="http://www.w3.org/2000/svg">
<path d="m13 3l3.293 3.293l-7 7l1.414 1.414l7-7L21 11V3z" fill="currentColor" />
<path d="M19 19H5V5h7l-2-2H5c-1.103 0-2 .897-2 2v14c0 1.103.897 2 2 2h14c1.103 0 2-.897 2-2v-5l-2-2v7z"
fill="currentColor">
</svg></span>
</a></p>
<p>确保前置包安装完成后即可启动镜像。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">docker run -d --gpus all -p 80:8501 registry.cn-beijing.aliyuncs.com/chatchat/chatchat:0.2.10
</span></span></code></pre></div><p>首次拉取镜像需要较长时间,建议喝茶等待。</p>
<p>拉取完成后查看镜像信息</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">~$ docker images
</span></span><span class="line"><span class="cl">REPOSITORY TAG IMAGE ID CREATED SIZE
</span></span><span class="line"><span class="cl">registry.cn-beijing.aliyuncs.com/chatchat/chatchat 0.2.10 ca7876ea20ca <span class="m">4</span> days ago 50.1GB
</span></span><span class="line"><span class="cl">getting-started latest ae9abf3b3b10 <span class="m">3</span> months ago 552MB
</span></span><span class="line"><span class="cl">voidreaming/getting-started latest ae9abf3b3b10 <span class="m">3</span> months ago 552MB
</span></span><span class="line"><span class="cl">&lt;none&gt; &lt;none&gt; 689e5f5388f9 <span class="m">3</span> months ago 552MB
</span></span><span class="line"><span class="cl">ubuntu latest 174c8c134b2a <span class="m">3</span> months ago 77.9MB
</span></span><span class="line"><span class="cl">alpine 3.16.3 bfe296a52501 <span class="m">17</span> months ago 5.54MB
</span></span></code></pre></div><p>查看容器信息</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">~$ docker ps
</span></span><span class="line"><span class="cl">CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
</span></span><span class="line"><span class="cl">ece84213a897 registry.cn-beijing.aliyuncs.com/chatchat/chatchat:0.2.10 <span class="s2">&#34;python3 /data/model…&#34;</span> <span class="m">5</span> hours ago Up <span class="m">4</span> hours 22/tcp, 7861/tcp, 0.0.0.0:80-&gt;8501/tcp, :::80-&gt;8501/tcp goofy_torvalds
</span></span></code></pre></div><p>上述命令中的 <code>-p 80:8501</code> 把项目 <code>Chatchat WEBUI Server: [http://0.0.0.0:8501](http://0.0.0.0:8501/)</code> 映射到了服务器默认 80 端口,部署成功后在浏览器打开服务器地址即可看到聊天窗口。</p>
<p><img src="http://localhost:1313/p/docker%E9%83%A8%E7%BD%B2langchain-chatchat/image-2.png"
width="2000"
height="1177"
srcset="http://localhost:1313/p/docker%E9%83%A8%E7%BD%B2langchain-chatchat/image-2_hu147cec4c74710c73755a3cc9a2b96c32_156794_480x0_resize_box_3.png 480w, http://localhost:1313/p/docker%E9%83%A8%E7%BD%B2langchain-chatchat/image-2_hu147cec4c74710c73755a3cc9a2b96c32_156794_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="alt text"
class="gallery-image"
data-flex-grow="169"
data-flex-basis="407px"
></p>
<p>另外<strong>API 服务 访问</strong> http://localhost:7861/docs </p>
<h2 id="坑点">坑点</h2>
<h3 id="driver-版本">Driver 版本</h3>
<p>由于以本项目镜像以 <code>nvidia/cuda:12.1.1-cudnn8-devel-ubuntu22.04</code> 为基础镜像,其中 12.*版本的 cuda 对于 driver 版本有特定要求。参考<a class="link" href="https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/" target="_blank" rel="noopener"
><strong>https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/</strong>
<span style="white-space: nowrap;"><svg width=".7em"
height=".7em" viewBox="0 0 21 21" xmlns="http://www.w3.org/2000/svg">
<path d="m13 3l3.293 3.293l-7 7l1.414 1.414l7-7L21 11V3z" fill="currentColor" />
<path d="M19 19H5V5h7l-2-2H5c-1.103 0-2 .897-2 2v14c0 1.103.897 2 2 2h14c1.103 0 2-.897 2-2v-5l-2-2v7z"
fill="currentColor">
</svg></span>
</a></p>
<p><img src="http://localhost:1313/p/docker%E9%83%A8%E7%BD%B2langchain-chatchat/image-3.png"
width="2000"
height="897"
srcset="http://localhost:1313/p/docker%E9%83%A8%E7%BD%B2langchain-chatchat/image-3_huff87b2e5cd0ff3a88973db70cc8da081_187178_480x0_resize_box_3.png 480w, http://localhost:1313/p/docker%E9%83%A8%E7%BD%B2langchain-chatchat/image-3_huff87b2e5cd0ff3a88973db70cc8da081_187178_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="alt text"
class="gallery-image"
data-flex-grow="222"
data-flex-basis="535px"
></p>
<p>最开始莫名其妙所有模型都跑在cpu 上,花了好长时间才排查出这个问题 TT</p>
<h2 id="学习归纳">学习归纳</h2>
<p>部署过程中了解到了</p>
<ul>
<li>如何用 remote-ssh连接服务器。</li>
<li>docker 基本使用方法。</li>
<li>服务器基本维护和使用。</li>
<li>vscode docker 插件打开容器进行编辑。</li>
<li>driver 和 cuda 版本相互限制关系。</li>
</ul>
<p>后续会写博客依次记录这些技术点。</p>
</description>
</item>
<item>
<title>[mit6.s081] 操作系统01-risc-v和xv6环境搭建</title>
<link>http://localhost:1313/p/mit6.s081-%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F01-risc-v%E5%92%8Cxv6%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA/</link>
<pubDate>Fri, 05 Apr 2024 12:20:01 +0800</pubDate>
<guid>http://localhost:1313/p/mit6.s081-%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F01-risc-v%E5%92%8Cxv6%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA/</guid>
<description><img src="http://localhost:1313/p/mit6.s081-%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F01-risc-v%E5%92%8Cxv6%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA/img.jpg" alt="Featured image of post [mit6.s081] 操作系统01-risc-v和xv6环境搭建" /><blockquote>
<p>关于在Macos系统下操作系统实验环境搭建的记录。学校的OS实验仿照mit6.s081 实验,所以资料大多参考网上关于mit6.s081 lab的实验安装RISC-V编译器和工具链。</p>
</blockquote>
<p>注明:本实验默认配置好了 <code>vscode</code> 、 <code>homegrew</code>、 <code>git</code> 等工具。</p>
<h3 id="关于risc-v编译器和工具链的介绍">关于<strong>RISC-V编译器和工具链的介绍。</strong></h3>
<p>2022 年6月22日举行 WWDC宣布Mac 电脑的 CPU 架构将从 Intel 的 x86 架构换成 Arm 架构,自此,Mac 和 iPhone 以及 ipad 使用同样的架构,统一了操作系统。</p>
<p>RISC-V 是一个开源的精简指令集,其相对于主流的新x86 和 ARM 处理器架构而言更为简单。RISC-V 的基础指令只有四十多条,另外更重要的一点,也是与本实验息息相关的一点就是 RISC-V 拥有完整的工具链,开发人员通过工具连=链与 cpu 进行交互,RISC-V社区已经提供了完整的工具链,并且RISC-V基金会持续维护该工具链。当前RISC-V的支持已经合并到主要的工具中,比如编译工具链gcc, 仿真工具qemu等,本次实验也会配置这些工具链。</p>
<h3 id="安装risc-v-gnu-compiler-toolchain">安装<strong>RISC-V GNU Compiler Toolchain</strong></h3>
<p>根据官网介绍,<strong>RISC-V GNU Compiler Toolchain</strong> 是 RISC-V C 和 C++ 交叉编译器。它支持两种编译模式:通用的 ELF/Newlib 工具链和更复杂的 Linux-ELF/glibc 工具链。</p>
<p>下载源码:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">git clone --recursive https://github.com/riscv/riscv-gnu-toolchain
</span></span></code></pre></div><p>温馨提示:耗时过长,大约半小时,建议喝茶等待。</p>
<p>按照官方文档,接下来构建 Newlib 交叉编译器。注意到指定安装路径</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">./configure --prefix<span class="o">=</span>/usr/local/opt/riscv-gnu-toolchain <span class="c1">#配置产物路径</span>
</span></span><span class="line"><span class="cl">make <span class="c1">#编译指令</span>
</span></span></code></pre></div><p>注:<code>./configure</code>: 这是一个常用的脚本,用于配置软件包的安装选项。<code>--prefix=/usr/local/opt/riscv-gnu-toolchain</code>: 这个参数指定了安装路径。</p>
<p>编译过程中可能会遇到权限问题</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="o">%</span> <span class="n">make</span>
</span></span><span class="line"><span class="cl"><span class="n">rm</span> <span class="o">-</span><span class="n">rf</span> <span class="n">stamps</span><span class="o">/</span><span class="n">build</span><span class="o">-</span><span class="n">gdb</span><span class="o">-</span><span class="n">newlib</span> <span class="n">build</span><span class="o">-</span><span class="n">gdb</span><span class="o">-</span><span class="n">newlib</span>
</span></span><span class="line"><span class="cl"><span class="n">rm</span><span class="p">:</span> <span class="n">build</span><span class="o">-</span><span class="n">gdb</span><span class="o">-</span><span class="n">newlib</span><span class="o">/</span><span class="n">config</span><span class="o">.</span><span class="n">log</span><span class="p">:</span> <span class="n">Permission</span> <span class="n">denied</span>
</span></span><span class="line"><span class="cl"><span class="n">rm</span><span class="p">:</span> <span class="n">build</span><span class="o">-</span><span class="n">gdb</span><span class="o">-</span><span class="n">newlib</span><span class="p">:</span> <span class="n">Permission</span> <span class="n">denied</span>
</span></span><span class="line"><span class="cl"><span class="n">make</span><span class="p">:</span> <span class="o">***</span> <span class="p">[</span><span class="n">stamps</span><span class="o">/</span><span class="n">build</span><span class="o">-</span><span class="n">gdb</span><span class="o">-</span><span class="n">newlib</span><span class="p">]</span> <span class="n">Error</span> <span class="mi">1</span>
</span></span></code></pre></div><p>此时用 <code>sudo make</code> 可以解决问题。</p>
<p>另外编译过程中可能会遇到如下报错:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="n">configure</span><span class="p">:</span> <span class="n">error</span><span class="p">:</span> <span class="n">Building</span> <span class="n">GDB</span> <span class="n">requires</span> <span class="n">GMP</span> <span class="mf">4.2</span><span class="o">+</span><span class="p">,</span> <span class="ow">and</span> <span class="n">MPFR</span> <span class="mf">3.1.0</span><span class="o">+.</span>
</span></span><span class="line"><span class="cl"><span class="n">Try</span> <span class="n">the</span> <span class="o">--</span><span class="k">with</span><span class="o">-</span><span class="n">gmp</span> <span class="ow">and</span><span class="o">/</span><span class="ow">or</span> <span class="o">--</span><span class="k">with</span><span class="o">-</span><span class="n">mpfr</span> <span class="n">options</span> <span class="n">to</span> <span class="n">specify</span>
</span></span><span class="line"><span class="cl"><span class="n">their</span> <span class="n">locations</span><span class="o">.</span> <span class="n">If</span> <span class="n">you</span> <span class="n">obtained</span> <span class="n">GMP</span> <span class="ow">and</span><span class="o">/</span><span class="ow">or</span> <span class="n">MPFR</span> <span class="kn">from</span> <span class="nn">a</span> <span class="n">vendor</span>
</span></span><span class="line"><span class="cl"><span class="n">distribution</span> <span class="n">package</span><span class="p">,</span> <span class="n">make</span> <span class="n">sure</span> <span class="n">that</span> <span class="n">you</span> <span class="n">have</span> <span class="n">installed</span> <span class="n">both</span> <span class="n">the</span> <span class="n">libraries</span>
</span></span><span class="line"><span class="cl"><span class="ow">and</span> <span class="n">the</span> <span class="n">header</span> <span class="n">files</span><span class="o">.</span> <span class="n">They</span> <span class="n">may</span> <span class="n">be</span> <span class="n">located</span> <span class="ow">in</span> <span class="n">separate</span> <span class="n">packages</span><span class="o">.</span>
</span></span><span class="line"><span class="cl"><span class="n">make</span><span class="p">:</span> <span class="o">***</span> <span class="p">[</span><span class="n">stamps</span><span class="o">/</span><span class="n">build</span><span class="o">-</span><span class="n">gdb</span><span class="o">-</span><span class="n">newlib</span><span class="p">]</span> <span class="n">Error</span> <span class="mi">1</span>
</span></span></code></pre></div><p>手动安装GMP 和 MPFR 即可。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="n">brew</span> <span class="n">install</span> <span class="n">gmp</span> <span class="n">mpfr</span>
</span></span></code></pre></div><p>📎若安装上面的包之后编译<code>riscv-gnu-toolchain</code>时gdb模块依然失败,报错: <code>make: *** [stamps/build-gdb-newlib] Error 2</code> 我们可以手动下载</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="n">brew</span> <span class="n">install</span> <span class="n">riscv64</span><span class="o">-</span><span class="n">elf</span><span class="o">-</span><span class="n">gdb</span>
</span></span></code></pre></div><p><a class="link" href="https://formulae.brew.sh/formula/riscv64-elf-gdb" target="_blank" rel="noopener"
>https://formulae.brew.sh/formula/riscv64-elf-gdb
<span style="white-space: nowrap;"><svg width=".7em"
height=".7em" viewBox="0 0 21 21" xmlns="http://www.w3.org/2000/svg">
<path d="m13 3l3.293 3.293l-7 7l1.414 1.414l7-7L21 11V3z" fill="currentColor" />
<path d="M19 19H5V5h7l-2-2H5c-1.103 0-2 .897-2 2v14c0 1.103.897 2 2 2h14c1.103 0 2-.897 2-2v-5l-2-2v7z"
fill="currentColor">
</svg></span>
</a></p>
<p>安装完成后配置环境变量。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="n">vim</span> <span class="o">~/.</span><span class="n">zshrc</span> <span class="c1">#打开配置文件</span>
</span></span><span class="line"><span class="cl"><span class="n">export</span> <span class="n">PATH</span><span class="o">=</span><span class="s2">&#34;$PATH:/usr/local/opt/riscv-gnu-toolchain/bin&#34;</span> <span class="c1">#末尾添加此行</span>
</span></span><span class="line"><span class="cl"><span class="n">source</span> <span class="o">~/.</span><span class="n">zshrc</span> <span class="c1">#使配置生效</span>
</span></span></code></pre></div><p>此时在命令行输入<code>riscv64-unknown-elf-gcc -v</code>,如果能显示版本信息则代表安装成功。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="o">%</span> <span class="n">riscv64</span><span class="o">-</span><span class="n">unknown</span><span class="o">-</span><span class="n">elf</span><span class="o">-</span><span class="n">gcc</span> <span class="o">-</span><span class="n">v</span>
</span></span><span class="line"><span class="cl"><span class="n">Using</span> <span class="n">built</span><span class="o">-</span><span class="ow">in</span> <span class="n">specs</span><span class="o">.</span>
</span></span><span class="line"><span class="cl"><span class="n">COLLECT_GCC</span><span class="o">=</span><span class="n">riscv64</span><span class="o">-</span><span class="n">unknown</span><span class="o">-</span><span class="n">elf</span><span class="o">-</span><span class="n">gcc</span>
</span></span><span class="line"><span class="cl"><span class="n">COLLECT_LTO_WRAPPER</span><span class="o">=/</span><span class="n">usr</span><span class="o">/</span><span class="n">local</span><span class="o">/</span><span class="n">opt</span><span class="o">/</span><span class="n">riscv</span><span class="o">-</span><span class="n">gnu</span><span class="o">-</span><span class="n">toolchain</span><span class="o">/</span><span class="n">libexec</span><span class="o">/</span><span class="n">gcc</span><span class="o">/</span><span class="n">riscv64</span><span class="o">-</span><span class="n">unknown</span><span class="o">-</span><span class="n">elf</span><span class="o">/</span><span class="mf">13.2.0</span><span class="o">/</span><span class="n">lto</span><span class="o">-</span><span class="n">wrapper</span>
</span></span><span class="line"><span class="cl"><span class="n">Target</span><span class="p">:</span> <span class="n">riscv64</span><span class="o">-</span><span class="n">unknown</span><span class="o">-</span><span class="n">elf</span>
</span></span><span class="line"><span class="cl"><span class="n">Configured</span> <span class="k">with</span><span class="p">:</span> <span class="o">/</span><span class="n">Users</span><span class="o">/</span><span class="n">nyota</span><span class="o">/</span><span class="n">Documents</span><span class="o">/</span><span class="mi">03</span><span class="n">_study</span><span class="o">/</span><span class="n">C_II</span><span class="o">/</span><span class="n">OS_experiment</span><span class="o">/</span><span class="n">riscv</span><span class="o">-</span><span class="n">gnu</span><span class="o">-</span><span class="n">toolchain</span><span class="o">/</span><span class="n">gcc</span><span class="o">/</span><span class="n">configure</span> <span class="o">--</span><span class="n">target</span><span class="o">=</span><span class="n">riscv64</span><span class="o">-</span><span class="n">unknown</span><span class="o">-</span><span class="n">elf</span> <span class="o">--</span><span class="n">prefix</span><span class="o">=/</span><span class="n">usr</span><span class="o">/</span><span class="n">local</span><span class="o">/</span><span class="n">opt</span><span class="o">/</span><span class="n">riscv</span><span class="o">-</span><span class="n">gnu</span><span class="o">-</span><span class="n">toolchain</span> <span class="o">--</span><span class="n">disable</span><span class="o">-</span><span class="n">shared</span> <span class="o">--</span><span class="n">disable</span><span class="o">-</span><span class="n">threads</span> <span class="o">--</span><span class="n">enable</span><span class="o">-</span><span class="n">languages</span><span class="o">=</span><span class="n">c</span><span class="p">,</span><span class="n">c</span><span class="o">++</span> <span class="o">--</span><span class="k">with</span><span class="o">-</span><span class="n">pkgversion</span><span class="o">=</span><span class="n">gc891d8dc23e1</span> <span class="o">--</span><span class="k">with</span><span class="o">-</span><span class="n">system</span><span class="o">-</span><span class="n">zlib</span> <span class="o">--</span><span class="n">enable</span><span class="o">-</span><span class="n">tls</span> <span class="o">--</span><span class="k">with</span><span class="o">-</span><span class="n">newlib</span> <span class="o">--</span><span class="k">with</span><span class="o">-</span><span class="n">sysroot</span><span class="o">=/</span><span class="n">usr</span><span class="o">/</span><span class="n">local</span><span class="o">/</span><span class="n">opt</span><span class="o">/</span><span class="n">riscv</span><span class="o">-</span><span class="n">gnu</span><span class="o">-</span><span class="n">toolchain</span><span class="o">/</span><span class="n">riscv64</span><span class="o">-</span><span class="n">unknown</span><span class="o">-</span><span class="n">elf</span> <span class="o">--</span><span class="k">with</span><span class="o">-</span><span class="n">native</span><span class="o">-</span><span class="n">system</span><span class="o">-</span><span class="n">header</span><span class="o">-</span><span class="nb">dir</span><span class="o">=/</span><span class="n">include</span> <span class="o">--</span><span class="n">disable</span><span class="o">-</span><span class="n">libmudflap</span> <span class="o">--</span><span class="n">disable</span><span class="o">-</span><span class="n">libssp</span> <span class="o">--</span><span class="n">disable</span><span class="o">-</span><span class="n">libquadmath</span> <span class="o">--</span><span class="n">disable</span><span class="o">-</span><span class="n">libgomp</span> <span class="o">--</span><span class="n">disable</span><span class="o">-</span><span class="n">nls</span> <span class="o">--</span><span class="n">disable</span><span class="o">-</span><span class="n">tm</span><span class="o">-</span><span class="n">clone</span><span class="o">-</span><span class="n">registry</span> <span class="o">--</span><span class="n">src</span><span class="o">=.././</span><span class="n">gcc</span> <span class="o">--</span><span class="n">disable</span><span class="o">-</span><span class="n">multilib</span> <span class="o">--</span><span class="k">with</span><span class="o">-</span><span class="n">abi</span><span class="o">=</span><span class="n">lp64d</span> <span class="o">--</span><span class="k">with</span><span class="o">-</span><span class="n">arch</span><span class="o">=</span><span class="n">rv64imafdc</span> <span class="o">--</span><span class="k">with</span><span class="o">-</span><span class="n">tune</span><span class="o">=</span><span class="n">rocket</span> <span class="o">--</span><span class="k">with</span><span class="o">-</span><span class="n">isa</span><span class="o">-</span><span class="n">spec</span><span class="o">=</span><span class="mi">20191213</span> <span class="s1">&#39;CFLAGS_FOR_TARGET=-Os -mcmodel=medlow&#39;</span> <span class="s1">&#39;CXXFLAGS_FOR_TARGET=-Os -mcmodel=medlow&#39;</span>
</span></span><span class="line"><span class="cl"><span class="n">Thread</span> <span class="n">model</span><span class="p">:</span> <span class="n">single</span>
</span></span><span class="line"><span class="cl"><span class="n">Supported</span> <span class="n">LTO</span> <span class="n">compression</span> <span class="n">algorithms</span><span class="p">:</span> <span class="n">zlib</span>
</span></span><span class="line"><span class="cl"><span class="n">gcc</span> <span class="n">version</span> <span class="mf">13.2.0</span> <span class="p">(</span><span class="n">gc891d8dc23e1</span><span class="p">)</span>
</span></span></code></pre></div><h3 id="安装-qemu">安装 QEMU</h3>
<p>QEMU是一个通用的开源机器模拟器和虚拟化器,用于在 ARM 架构上模拟RISC-V架构的CPU</p>
<p>直接通过 brew 安装即可</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="n">brew</span> <span class="n">install</span> <span class="n">qemu</span>
</span></span></code></pre></div><h3 id="最后下载xv6-源码">最后下载xv6 源码</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="n">git</span> <span class="n">clone</span> <span class="n">git</span><span class="nd">@github.com</span><span class="p">:</span><span class="n">mit</span><span class="o">-</span><span class="n">pdos</span><span class="o">/</span><span class="n">xv6</span><span class="o">-</span><span class="n">riscv</span><span class="o">.</span><span class="n">git</span>
</span></span></code></pre></div><p>注意xv6-riscv-fall19已经停止维护了,所以要从https://github.com/mit-pdos/xv6-riscv下载。</p>
<p>在项目目录下编译,如果能进入xv6的shell则表示实验环境已搭建成功.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="n">make</span>
</span></span><span class="line"><span class="cl"><span class="n">make</span> <span class="n">qemu</span>
</span></span></code></pre></div><p>到目前为止我们已经完成环境的配置,可以开始调试代码啦~👋</p>
</description>
</item>
<item>
<title>关于 | About</title>
<link>http://localhost:1313/%E5%85%B3%E4%BA%8E-about/</link>
<pubDate>Sun, 24 Mar 2024 00:00:00 +0000</pubDate>
<guid>http://localhost:1313/%E5%85%B3%E4%BA%8E-about/</guid>
<description><img src="http://localhost:1313/%E5%85%B3%E4%BA%8E-about/monv.jpg" alt="Featured image of post 关于 | About" /><h2 id="intro">Intro</h2>
<p>💫 这里是跃入间隙,栖居于计算机和文字交织的wonderland,指学计算机的文学爱好者。</p>
<h2 id="自我陈述">自我陈述</h2>
<p>我不喜欢形容词,不喜欢口号标语,不喜欢言之凿凿,不喜欢大而不当的描述,<br>
不喜欢过于明晰的事物,我喜欢流动、喜欢象征、喜欢差错、喜欢譬喻。</p>
<p>生命是流动着的。</p>
<p>一些形容词和标准可以赋予生命以形状和色彩,或许我们都是一团涌动着的水汽,<br>
在上升和凝结的过程中钻进各式各样的瓦瓦罐罐里,变成不同的形状,拥有不同的颜色。</p>
<h2 id="博客内容陈述">博客内容陈述</h2>
<p>记录计算机学习踩坑之旅,另外是大量的生活分享和创造输出。</p>
<h2 id="兴趣">兴趣</h2>
<p>典型杂事动物,喜欢阅读,<a class="link" href="https://marshy-countess-687.notion.site/e14ae9901c524bdebf3f78de4aff1b47?pvs=4" target="_blank" rel="noopener"
>个人图书馆
<span style="white-space: nowrap;"><svg width=".7em"
height=".7em" viewBox="0 0 21 21" xmlns="http://www.w3.org/2000/svg">
<path d="m13 3l3.293 3.293l-7 7l1.414 1.414l7-7L21 11V3z" fill="currentColor" />
<path d="M19 19H5V5h7l-2-2H5c-1.103 0-2 .897-2 2v14c0 1.103.897 2 2 2h14c1.103 0 2-.897 2-2v-5l-2-2v7z"
fill="currentColor">
</svg></span>
</a><br>
喜欢摄影,[个人影集]<br>
跑步、烘焙、压马路,听摇滚,最喜欢oasis,积极的素食主义实践者。</p>
<p>不犯懒、不断尝试新的事物在我看来很酷,<br>
另外我自认为自己很酷🌝</p>
</description>
</item>
<item>
<title>Test</title>
<link>http://localhost:1313/test/</link>
<pubDate>Mon, 29 Jan 2024 15:58:32 +0800</pubDate>
<guid>http://localhost:1313/test/</guid>
<description><p>hello world!</p>
</description>
</item>
<item>
<title>归档 | Archives</title>
<link>http://localhost:1313/archives/</link>
<pubDate>Tue, 28 May 2019 00:00:00 +0000</pubDate>
<guid>http://localhost:1313/archives/</guid>
<description></description>
</item>
<item>
<title>Math Typesetting</title>
<link>http://localhost:1313/p/math-typesetting/</link>
<pubDate>Fri, 08 Mar 2019 00:00:00 +0000</pubDate>
<guid>http://localhost:1313/p/math-typesetting/</guid>
<description><p>Mathematical notation in a Hugo project can be enabled by using third party JavaScript libraries.</p>
<p>In this example we will be using <a class="link" href="https://katex.org/" target="_blank" rel="noopener"
>KaTeX
<span style="white-space: nowrap;"><svg width=".7em"
height=".7em" viewBox="0 0 21 21" xmlns="http://www.w3.org/2000/svg">
<path d="m13 3l3.293 3.293l-7 7l1.414 1.414l7-7L21 11V3z" fill="currentColor" />
<path d="M19 19H5V5h7l-2-2H5c-1.103 0-2 .897-2 2v14c0 1.103.897 2 2 2h14c1.103 0 2-.897 2-2v-5l-2-2v7z"
fill="currentColor">
</svg></span>
</a></p>
<ul>
<li>Create a partial under <code>/layouts/partials/math.html</code></li>
<li>Within this partial reference the <a class="link" href="https://katex.org/docs/autorender.html" target="_blank" rel="noopener"
>Auto-render Extension
<span style="white-space: nowrap;"><svg width=".7em"
height=".7em" viewBox="0 0 21 21" xmlns="http://www.w3.org/2000/svg">
<path d="m13 3l3.293 3.293l-7 7l1.414 1.414l7-7L21 11V3z" fill="currentColor" />
<path d="M19 19H5V5h7l-2-2H5c-1.103 0-2 .897-2 2v14c0 1.103.897 2 2 2h14c1.103 0 2-.897 2-2v-5l-2-2v7z"
fill="currentColor">
</svg></span>
</a> or host these scripts locally.</li>
<li>Include the partial in your templates like so:</li>
</ul>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="o">{{</span> <span class="k">if</span> or .Params.math .Site.Params.math <span class="o">}}</span>
</span></span><span class="line"><span class="cl"><span class="o">{{</span> partial <span class="s2">&#34;math.html&#34;</span> . <span class="o">}}</span>
</span></span><span class="line"><span class="cl"><span class="o">{{</span> end <span class="o">}}</span>
</span></span></code></pre></div><ul>
<li>To enable KaTex globally set the parameter <code>math</code> to <code>true</code> in a project&rsquo;s configuration</li>
<li>To enable KaTex on a per page basis include the parameter <code>math: true</code> in content files</li>
</ul>
<p><strong>Note:</strong> Use the online reference of <a class="link" href="https://katex.org/docs/supported.html" target="_blank" rel="noopener"
>Supported TeX Functions
<span style="white-space: nowrap;"><svg width=".7em"
height=".7em" viewBox="0 0 21 21" xmlns="http://www.w3.org/2000/svg">
<path d="m13 3l3.293 3.293l-7 7l1.414 1.414l7-7L21 11V3z" fill="currentColor" />
<path d="M19 19H5V5h7l-2-2H5c-1.103 0-2 .897-2 2v14c0 1.103.897 2 2 2h14c1.103 0 2-.897 2-2v-5l-2-2v7z"
fill="currentColor">
</svg></span>
</a></p>
<h3 id="examples">Examples</h3>
<p>Inline math: $\varphi = \dfrac{1+\sqrt5}{2}= 1.6180339887…$</p>
<p>Block math:
$$
\varphi = 1+\frac{1} {1+\frac{1} {1+\frac{1} {1+\cdots} } }
$$</p></description>
</item>
<item>
<title>Emoji Support</title>
<link>http://localhost:1313/p/emoji-support/</link>
<pubDate>Tue, 05 Mar 2019 00:00:00 +0000</pubDate>
<guid>http://localhost:1313/p/emoji-support/</guid>
<description><img src="http://localhost:1313/p/emoji-support/the-creative-exchange-d2zvqp3fpro-unsplash.jpg" alt="Featured image of post Emoji Support" /><p>Emoji can be enabled in a Hugo project in a number of ways.</p>
<p>The <a class="link" href="https://gohugo.io/functions/emojify/" target="_blank" rel="noopener"
><code>emojify</code>
<span style="white-space: nowrap;"><svg width=".7em"
height=".7em" viewBox="0 0 21 21" xmlns="http://www.w3.org/2000/svg">
<path d="m13 3l3.293 3.293l-7 7l1.414 1.414l7-7L21 11V3z" fill="currentColor" />
<path d="M19 19H5V5h7l-2-2H5c-1.103 0-2 .897-2 2v14c0 1.103.897 2 2 2h14c1.103 0 2-.897 2-2v-5l-2-2v7z"
fill="currentColor">
</svg></span>
</a> function can be called directly in templates or <a class="link" href="https://gohugo.io/templates/shortcode-templates/#inline-shortcodes" target="_blank" rel="noopener"
>Inline Shortcodes
<span style="white-space: nowrap;"><svg width=".7em"
height=".7em" viewBox="0 0 21 21" xmlns="http://www.w3.org/2000/svg">
<path d="m13 3l3.293 3.293l-7 7l1.414 1.414l7-7L21 11V3z" fill="currentColor" />
<path d="M19 19H5V5h7l-2-2H5c-1.103 0-2 .897-2 2v14c0 1.103.897 2 2 2h14c1.103 0 2-.897 2-2v-5l-2-2v7z"
fill="currentColor">
</svg></span>
</a>.</p>
<p>To enable emoji globally, set <code>enableEmoji</code> to <code>true</code> in your site&rsquo;s <a class="link" href="https://gohugo.io/getting-started/configuration/" target="_blank" rel="noopener"
>configuration
<span style="white-space: nowrap;"><svg width=".7em"
height=".7em" viewBox="0 0 21 21" xmlns="http://www.w3.org/2000/svg">
<path d="m13 3l3.293 3.293l-7 7l1.414 1.414l7-7L21 11V3z" fill="currentColor" />
<path d="M19 19H5V5h7l-2-2H5c-1.103 0-2 .897-2 2v14c0 1.103.897 2 2 2h14c1.103 0 2-.897 2-2v-5l-2-2v7z"
fill="currentColor">
</svg></span>
</a> and then you can type emoji shorthand codes directly in content files; e.g.</p>
<p><span class="nowrap"><span class="emojify">🙈</span> <code>:see_no_evil:</code></span> <span class="nowrap"><span class="emojify">🙉</span> <code>:hear_no_evil:</code></span> <span class="nowrap"><span class="emojify">🙊</span> <code>:speak_no_evil:</code></span></p>
<br>
<p>The <a class="link" href="http://www.emoji-cheat-sheet.com/" target="_blank" rel="noopener"
>Emoji cheat sheet
<span style="white-space: nowrap;"><svg width=".7em"
height=".7em" viewBox="0 0 21 21" xmlns="http://www.w3.org/2000/svg">
<path d="m13 3l3.293 3.293l-7 7l1.414 1.414l7-7L21 11V3z" fill="currentColor" />
<path d="M19 19H5V5h7l-2-2H5c-1.103 0-2 .897-2 2v14c0 1.103.897 2 2 2h14c1.103 0 2-.897 2-2v-5l-2-2v7z"
fill="currentColor">
</svg></span>
</a> is a useful reference for emoji shorthand codes.</p>
<hr>
<p>change images finalchange images final
<strong>N.B.</strong> The above steps enable Unicode Standard emoji characters and sequences in Hugo, however the rendering of these glyphs depends on the browser and the platform. To style the emoji you can either use a third party emoji font or a font stack; e.g.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-html" data-lang="html"><span class="line"><span class="cl">.emoji {
</span></span><span class="line"><span class="cl"> font-family: Apple Color Emoji, Segoe UI Emoji, NotoColorEmoji, Segoe UI Symbol, Android Emoji, EmojiSymbols;
</span></span><span class="line"><span class="cl">}</span></span></code></pre></div></description>
</item>
<item>
<title>友链 | Links</title>
<link>http://localhost:1313/%E5%8F%8B%E9%93%BE-links/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
<guid>http://localhost:1313/%E5%8F%8B%E9%93%BE-links/</guid>
<description><p>To use this feature, add <code>links</code> section to frontmatter.</p>
<p>This page&rsquo;s frontmatter:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">links</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">title</span><span class="p">:</span><span class="w"> </span><span class="l">GitHub</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">description</span><span class="p">:</span><span class="w"> </span><span class="l">GitHub is the world&#39;s largest software development platform.</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">website</span><span class="p">:</span><span class="w"> </span><span class="l">https://github.com</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">image</span><span class="p">:</span><span class="w"> </span><span class="l">https://github.githubassets.com/images/modules/logos_page/GitHub-Mark.png</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">title</span><span class="p">:</span><span class="w"> </span><span class="l">TypeScript</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">description</span><span class="p">:</span><span class="w"> </span><span class="l">TypeScript is a typed superset of JavaScript that compiles to plain JavaScript.</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">website</span><span class="p">:</span><span class="w"> </span><span class="l">https://www.typescriptlang.org</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">image</span><span class="p">:</span><span class="w"> </span><span class="l">ts-logo-128.jpg</span><span class="w">
</span></span></span></code></pre></div><p><code>image</code> field accepts both local and external images.</p>
</description>
</item>
<item>
<title>搜索 | Search</title>
<link>http://localhost:1313/search/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
<guid>http://localhost:1313/search/</guid>
<description></description>
</item>
</channel>
</rss>