【从零开始】1. 一切从硬件升级开始
liebian365 2024-11-20 18:22 15 浏览 0 评论
一转眼 2024 就只剩下 3 个月了,回过头看看今年的“成绩单”...虽人工智能和 Python 都略有见长,但能公开的内容却非常有限(因大部分内容会与公司业务“强耦合”,数据脱敏后内容将无法自证,因此这部分内容暂时无法公开)。Java 方面,基于 Vert.x 的 vtx_fw 框架已有较长时间没有更新维护了(Github 给我的安全警告都还没修复)。另外,区块链和隐私计算方面本想 3 月做一次大规模升级的,但到现在都还没有动手...
今年实在有太多事情打乱了原有计划(干了很多事又没什么结果)。时至今日,趁着给自己的老爷机升级之际,下定决心逐步完成剩下的 “2024计划” 。
接下来“2024 计划”的所有成果将会在【从零开始】系列文章中体现。系列共分三部分:
第一部,分将从硬件升级开始到手搓 RAG 生成式人工智能结束;
第二部,分将会对 vtx_fw 框架进行重构升级;
第三部,分将会对 Hyperledger Besu 区块链进行升级并完成隐私计算核心代码的编写;
以上三部分都将会结合代码进行详解,过程遇到的问题也会详细说明(避免各位看官再次踩坑)。此外,文章中出现的代码也会同步上传到 Github ,有需要的可以自取。
好了,话不多说正式进入正题。
本章作为第一章将从升级硬件开始说起,先上一张配置图:
这台机原本是买来处理文档使用,现在要用它去搞人工智能属实有点牵强。
无奈今年赚不到钱,要重组一台高性能 PC 财力不允许,最后只能向现实低头在现有基础上进行升级。
既然后续需要做人工智能相关工作,那么算力是必不可缺的,最起码也要弄个显卡...最好还是 NVIDIA 。毕竟transformers 架构用 CUDA 做实时推理是目前最成熟的解决方案了。那么第一个问题来了,基于 H81M-K 小主板,且能与 i5-4590 CPU 相匹配的显卡有那些呢?其实可选的并不多,无非就是 750 Ti、960、1050 Ti、1060 这些,而且价格都符合心里预期(毕竟二手卡价格也就那么回事)。
那么第二个就是显存问题了,显存太少没有意义。像 750、960 这些就 Pass 掉了,剩下的就是从 1050 Ti 和1060 之间选择了。结果发现多花了 100 块就能有多 2G 的显存...于是最后入手了一张 1060,如下图:
由于 1060 还需要额外供电,靠原配电源(230w)是不够的。再咬一咬牙将电源也换一下吧,如下图:
等全部硬件支付完成后,不知为什么突然有种莫名的违和感。“我是不是漏了什么没有想清楚”这种想法一直萦绕着我,直到我看到了到货的 1060...
除了主板是小主板外,我的机箱也是小机箱(当初买的时候特意挑小机箱比较好卡位...)。这导致 1060 居然放不进去...晕死。无奈之下只好将 1060 塑料外壳剪掉一部分,如下图:
这样才能勉强放得进去
此外,由于需要预留空间给显卡,原来机械硬盘只能钉到“墙”上(拆掉开机面板,另外再买个外置开关),最后整个机箱布局是这样的,如下图:
考虑到内部散热问题在原开机面板位置增设了风扇,风向与机箱内所有风扇风向一致,如下图:
直接将空间利用率拉满。
硬件安装完毕后接下来到操作系统了。
对于这种老爷机 Windows 10 不再是首选(资源消耗严重),另外,我对界面也没有什么要求,那么 Deepin、Manjaro 等也可以放弃了。现在最需要考虑的是硬件适配和操作系统对于驱动的支持程度...这方面 Debian 系列就非常不错。但在 Debian 系谱中数用户体验最好的还得是 Linux Mint(个人认为)。
安装 Linux Mint 几乎没有遇到什么问题,而且系统升级和驱动安装都非常丝滑。这 NVIDIA 和 CUDA 驱动直接通过“驱动管理器”安装即可
安装完驱动后可以安装 Ollama 进行实时推理的测试(毕竟这显卡买的就是为了这个),如下图:
访问地址:https://github.com/ollama/ollama/releases/
在 Github Ollama 仓库中找到对应平台压缩包进行下载(由于国内“墙”的原因,不建议使用官网推荐的脚本安装,还是老老实实下载离线安装版本)
下载完成后解压,最终 ollama 执行文件存放在 ./bin 目录下,将其进行复制
sudo mv ollama /usr/local/bin/ollama
之后就可以尝试启动 ollama
yzh@yzh-mint:~/Documents$ ollama serve
Couldn't find '/home/yzh/.ollama/id_ed25519'. Generating new private key.
Your new public key is:
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGxEab8HDq5EVKR3Ody+NiaE/VhhB0ZElMjMTCZTOknn
2024/10/22 01:17:17 routes.go:1158: INFO server config env="map[CUDA_VISIBLE_DEVICES: GPU_DEVICE_ORDINAL: HIP_VISIBLE_DEVICES: HSA_OVERRIDE_GFX_VERSION: HTTPS_PROXY: HTTP_PROXY: NO_PROXY: OLLAMA_DEBUG:false OLLAMA_FLASH_ATTENTION:false OLLAMA_GPU_OVERHEAD:0 OLLAMA_HOST:http://127.0.0.1:11434 OLLAMA_INTEL_GPU:false OLLAMA_KEEP_ALIVE:5m0s OLLAMA_LLM_LIBRARY: OLLAMA_LOAD_TIMEOUT:5m0s OLLAMA_MAX_LOADED_MODELS:0 OLLAMA_MAX_QUEUE:512 OLLAMA_MODELS:/home/yzh/.ollama/models OLLAMA_MULTIUSER_CACHE:false OLLAMA_NOHISTORY:false OLLAMA_NOPRUNE:false OLLAMA_NUM_PARALLEL:0 OLLAMA_ORIGINS:[http://localhost https://localhost http://localhost:* https://localhost:* http://127.0.0.1 https://127.0.0.1 http://127.0.0.1:* https://127.0.0.1:* http://0.0.0.0 https://0.0.0.0 http://0.0.0.0:* https://0.0.0.0:* app://* file://* tauri://*] OLLAMA_SCHED_SPREAD:false OLLAMA_TMPDIR: ROCR_VISIBLE_DEVICES: http_proxy: https_proxy: no_proxy:]"
time=2024-10-22T01:17:17.126+08:00 level=INFO source=images.go:754 msg="total blobs: 0"
time=2024-10-22T01:17:17.126+08:00 level=INFO source=images.go:761 msg="total unused blobs removed: 0"
time=2024-10-22T01:17:17.126+08:00 level=INFO source=routes.go:1205 msg="Listening on 127.0.0.1:11434 (version 0.3.14)"
time=2024-10-22T01:17:17.127+08:00 level=INFO source=common.go:135 msg="extracting embedded files" dir=/tmp/ollama2543868661/runners
time=2024-10-22T01:17:35.451+08:00 level=INFO source=common.go:49 msg="Dynamic LLM libraries" runners="[cpu cpu_avx cpu_avx2 cuda_v11 cuda_v12 rocm_v60102]"
time=2024-10-22T01:17:35.451+08:00 level=INFO source=gpu.go:221 msg="looking for compatible GPUs"
time=2024-10-22T01:17:35.452+08:00 level=WARN source=gpu.go:728 msg="unable to locate gpu dependency libraries"
time=2024-10-22T01:17:35.452+08:00 level=WARN source=gpu.go:728 msg="unable to locate gpu dependency libraries"
time=2024-10-22T01:17:35.452+08:00 level=WARN source=gpu.go:728 msg="unable to locate gpu dependency libraries"
time=2024-10-22T01:17:35.597+08:00 level=INFO source=types.go:123 msg="inference compute" id=GPU-f52987a4-8dca-da1f-c16b-2f533d3b7663 library=cuda variant=v12 compute=6.1 driver=12.4 name="NVIDIA GeForce GTX 1060 6GB" total="5.9 GiB" available="5.5 GiB"
从输出可以看出 ollama 启动时已经能够识别 1060 显卡。但由于 1060 显存只有 6G,因此这次就选择 llama 3.2:3b 进行测试。
yzh@yzh-mint:~/Documents$ ollama pull llama3.2:3b-instruct-q5_K_M
pulling manifest
pulling 05fc42664a93... 100% ▕██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏ 2.3 GB
pulling 966de95ca8a6... 100% ▕██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏ 1.4 KB
pulling fcc5a6bec9da... 100% ▕██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏ 7.7 KB
pulling a70ff7e570d9... 100% ▕██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏ 6.0 KB
pulling 56bb8bd477a5... 100% ▕██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏ 96 B
pulling e32efebd9779... 100% ▕██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏ 561 B
verifying sha256 digest
writing manifest
success
模型下载完成后就可以运行了,但是运行前先打开 nvtop 来监控一下显卡的运行情况
感觉响应速度还是挺快的,并且通过 nvtop 和 nvidia-smi 可知 GPU 使用率和温度都在安全范围之内(这里只做了 15 分钟的连续性测试,可能对于显卡发热情况描述并不准确,但 GPU 的使用情况还是比较稳定的)。如下图:
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 550.107.02 Driver Version: 550.107.02 CUDA Version: 12.4 |
|-----------------------------------------+------------------------+----------------------+
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+========================+======================|
| 0 NVIDIA GeForce GTX 1060 6GB Off | 00000000:01:00.0 On | N/A |
| 39% 46C P8 11W / 120W | 4036MiB / 6144MiB | 0% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
最后再看看模型参数和每次会话 token 的生成情况
INFO [main] HTTP server listening | hostname="127.0.0.1" n_threads_http="6" port="37293" tid="123776269340672" timestamp=1729532292
time=2024-10-22T01:38:12.501+08:00 level=INFO source=server.go:621 msg="waiting for server to become available" status="llm server loading model"
...
INFO [main] model loaded | tid="123776269340672" timestamp=1729532296
time=2024-10-22T01:38:16.516+08:00 level=INFO source=server.go:626 msg="llama runner started in 4.27 seconds"
[GIN] 2024/10/22 - 01:38:16 | 200 | 4.554398356s | 127.0.0.1 | POST "/api/generate"
[GIN] 2024/10/22 - 01:38:53 | 200 | 22.169μs | 127.0.0.1 | HEAD "/"
[GIN] 2024/10/22 - 01:38:53 | 200 | 22.58911ms | 127.0.0.1 | POST "/api/show"
[GIN] 2024/10/22 - 01:38:53 | 200 | 21.247098ms | 127.0.0.1 | POST "/api/generate"
[GIN] 2024/10/22 - 01:39:36 | 200 | 10.955631799s | 127.0.0.1 | POST "/api/chat"
[GIN] 2024/10/22 - 01:40:37 | 200 | 13.824691233s | 127.0.0.1 | POST "/api/chat"
[GIN] 2024/10/22 - 01:41:22 | 200 | 15.508863231s | 127.0.0.1 | POST "/api/chat"
就目前来看 llama 3.2:3b 对于我这种小显存的显卡来说还是比较友好的。
By the way...在安装系统的过程中遇到了一个小插曲 - NTFS 格式磁盘无法挂载到 Linux Mint。
因为之前系统使用的是 Windows,磁盘就顺理成章地使用了 NTFS 格式。本来这个也不是什么大事请,Linux Mint 在系统安装的时候就已经默认将 NTFS 适配驱动安装的了。但是这次的情况有点特殊死活都挂载不了,没有办法之能够使用 sudo dmesg | tail 命令进行排查,如下图:
yzh@yzh-mint:~$ sudo dmesg | tail
[sudo] password for yzh:
[ 1992.351113] sd 4:0:0:1: [sdd] Attached SCSI disk
[ 1992.380221] sdc: sdc1 sdc2
[ 1992.380481] sd 4:0:0:0: [sdc] Attached SCSI disk
[ 1992.923979] ntfs3: Enabled Linux POSIX ACLs support
[ 1992.923983] ntfs3: Read-only LZX/Xpress compression included
[ 1992.930243] ntfs3: sdc2: It is recommened to use chkdsk.
[ 1992.974849] EXT4-fs (sdd1): mounted filesystem e8a9dbb5-62c0-4218-92b0-e7c6eca9cca5 r/w with ordered data mode. Quota mode: none.
[ 1993.454755] ntfs3: sdc2: volume is dirty and "force" flag is not set!
[ 2215.187804] ntfs3: sdc2: It is recommened to use chkdsk.
[ 2215.382326] ntfs3: sdc2: volume is dirty and "force" flag is not set!
搜索发现这是因为 /dev/sdc2 这个 volume 被标记为 dirty 了,这时可以通过 ntfsfix 命令去修复,如下图:
yzh@yzh-mint:~$ sudo ntfsfix -d /dev/sdc2
Mounting volume... OK
Processing of $MFT and $MFTMirr completed successfully.
Checking the alternate boot sector... OK
NTFS volume version is 3.1.
NTFS partition /dev/sdc2 was processed successfully.
之后就能够顺利挂载了,估计是之前在正在做备份的时候断电引起的,真的吓出一身冷汗。
(未完待续...)
相关推荐
- 4万多吨豪华游轮遇险 竟是因为这个原因……
-
(观察者网讯)4.7万吨豪华游轮搁浅,竟是因为油量太低?据观察者网此前报道,挪威游轮“维京天空”号上周六(23日)在挪威近海发生引擎故障搁浅。船上载有1300多人,其中28人受伤住院。经过数天的调...
- “菜鸟黑客”必用兵器之“渗透测试篇二”
-
"菜鸟黑客"必用兵器之"渗透测试篇二"上篇文章主要针对伙伴们对"渗透测试"应该如何学习?"渗透测试"的基本流程?本篇文章继续上次的分享,接着介绍一下黑客们常用的渗透测试工具有哪些?以及用实验环境让大家...
- 科幻春晚丨《震动羽翼说“Hello”》两万年星间飞行,探测器对地球的最终告白
-
作者|藤井太洋译者|祝力新【编者按】2021年科幻春晚的最后一篇小说,来自大家喜爱的日本科幻作家藤井太洋。小说将视角放在一颗太空探测器上,延续了他一贯的浪漫风格。...
- 麦子陪你做作业(二):KEGG通路数据库的正确打开姿势
-
作者:麦子KEGG是通路数据库中最庞大的,涵盖基因组网络信息,主要注释基因的功能和调控关系。当我们选到了合适的候选分子,单变量研究也已做完,接着研究机制的时便可使用到它。你需要了解你的分子目前已有哪些...
- 知存科技王绍迪:突破存储墙瓶颈,详解存算一体架构优势
-
智东西(公众号:zhidxcom)编辑|韦世玮智东西6月5日消息,近日,在落幕不久的GTIC2021嵌入式AI创新峰会上,知存科技CEO王绍迪博士以《存算一体AI芯片:AIoT设备的算力新选择》...
- 每日新闻播报(September 14)_每日新闻播报英文
-
AnOscarstatuestandscoveredwithplasticduringpreparationsleadinguptothe87thAcademyAward...
- 香港新巴城巴开放实时到站数据 供科技界研发使用
-
中新网3月22日电据香港《明报》报道,香港特区政府致力推动智慧城市,鼓励公私营机构开放数据,以便科技界研发使用。香港运输署21日与新巴及城巴(两巴)公司签署谅解备忘录,两巴将于2019年第3季度,开...
- 5款不容错过的APP: Red Bull Alert,Flipagram,WifiMapper
-
本周有不少非常出色的app推出,鸵鸟电台做了一个小合集。亮相本周榜单的有WifiMapper's安卓版的app,其中包含了RedBull的一款新型闹钟,还有一款可爱的怪物主题益智游戏。一起来看看我...
- Qt动画效果展示_qt显示图片
-
今天在这篇博文中,主要实践Qt动画,做一个实例来讲解Qt动画使用,其界面如下图所示(由于没有录制为gif动画图片,所以请各位下载查看效果):该程序使用应用程序单窗口,主窗口继承于QMainWindow...
- 如何从0到1设计实现一门自己的脚本语言
-
作者:dong...
- 三年级语文上册 仿写句子 需要的直接下载打印吧
-
描写秋天的好句好段1.秋天来了,山野变成了美丽的图画。苹果露出红红的脸庞,梨树挂起金黄的灯笼,高粱举起了燃烧的火把。大雁在天空一会儿写“人”字,一会儿写“一”字。2.花园里,菊花争奇斗艳,红的似火,粉...
- C++|那些一看就很简洁、优雅、经典的小代码段
-
目录0等概率随机洗牌:1大小写转换2字符串复制...
- 二年级上册语文必考句子仿写,家长打印,孩子照着练
-
二年级上册语文必考句子仿写,家长打印,孩子照着练。具体如下:...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- wireshark怎么抓包 (75)
- qt sleep (64)
- cs1.6指令代码大全 (55)
- factory-method (60)
- sqlite3_bind_blob (52)
- hibernate update (63)
- c++ base64 (70)
- nc 命令 (52)
- wm_close (51)
- epollin (51)
- sqlca.sqlcode (57)
- lua ipairs (60)
- tv_usec (64)
- 命令行进入文件夹 (53)
- postgresql array (57)
- statfs函数 (57)
- .project文件 (54)
- lua require (56)
- for_each (67)
- c#工厂模式 (57)
- wxsqlite3 (66)
- dmesg -c (58)
- fopen参数 (53)
- tar -zxvf -c (55)
- 速递查询 (52)