百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术分析 > 正文

【从零开始】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字符串复制...

二年级上册语文必考句子仿写,家长打印,孩子照着练

二年级上册语文必考句子仿写,家长打印,孩子照着练。具体如下:...

一年级语文上 句子专项练习(可打印)

...

亲自上阵!C++ 大佬深度“剧透”:C++26 将如何在代码生成上对抗 Rust?

...

取消回复欢迎 发表评论: