2赞

回答

收藏

[Digital Spaceport][AMD EPYC]两千美金成本,本地化运行671b-Q4

 

软件部署 软件部署 1046 人阅读 | 0 人回复 | 2025-03-06

本帖最后由 Ref 于 2025-3-7 09:26 编辑

文章作者:DigitalSpaceport(https://www.youtube.com/watch?v=Tq_cmN4j2yY&t=2s)
原文:Digital Spaceport
译者:珠海宇扬翻译
译文首发:太素阁
转载请保留此简介

image002.jpg


AIDeepseek 本地推理系统搭建教程
首先分享一个好消息:我从同一套AMD EPYC Rome基准系统中获得了非常稳定的推理性能表现,这台服务器始终是我们整个技术探索旅程的核心。最初选择的硬件配置至今依然表现卓越!如果你也拥有类似的系统,那么恭喜你,你可以完全在它上面运行完整的Deepseek R1的671b全量模型(Q4),速度大概在3.5TPS至4.25TPS之间(tokens per second)。这一点至关重要,因为蒸馏版模型与完整模型完全不同,其性能远低于完整模型,许多其他模型也能轻松胜过它们。要想让该模型真正展现其能力,那便需要运行完整模型,再搭配上16K或更大的上下文窗口。这样的资源投入绝对物有所值。不过由于该模型仅凭CPU就能获得不错的运行效能,这意味着你可以同时并行运行其他小型模型(例如视觉模型)。需要特别说明的是,除非配备顶级显卡,否则该模型无法仅依靠GPU显存独立完整运行。接下来我会展示如何让其在更大众化的配置下也能工作。这并不算“简单”,但如果你喜欢动手折腾,就会觉得乐趣多多。

2024年2月1日新增信息(译者注:这里可能是作者写错年份了):
空闲功耗:60瓦(远低于期待,断开GPU)        
满载功耗:260瓦                                          
当前运行内存速度:2400MHz(若提升至3200MHz很可能对性能有显著影响)


本地AICPU计算硬件指南
如果你之前按照我发布的四卡RTX 3090配置指南搭建了系统,那么恭喜你——AMD EPYC 7702这颗CPU依然实力不俗。本文中将推荐一颗更好的CPU,价位与7702一致,而性能会好上不少,不过本文展示的结果仍是基于我机器中这颗7702算出来的。主板方面,MZ32-AR0仍是入门优选,因为它以极低的价格提供了多达 16 个能跑满3200MHz的 DIMM 内存插槽,让你轻松上到 512GB 或 1TB 的系统内存。 目前,我使用的是2400MHz DDR4内存条,若改用3200MHz DDR4 ECC内存条预计会带来额外的性能提升。内存容量方面:16x32GB内存条 → 512GB;16x64GB内存条 → 1TB。切忌混用LRDIMM与RDIMM内存类型!

本地AI计算机组装配置清单

价格更新于2025年1月29日
总体估价:约2000美元(配置 EPYC 7702 + 512GB 2400MHz内存) 如果想性能更佳,我的首选是换用 7C13 或 7V13 处理器而非使用更高频的内存,次选是把内存加大到768GB,最后才是换用3200MHz的内存。若是选择顶配方案(7C13/7V13 + 1TB DDR4 2400MHz内存),总价约为2500美元。

设备机组机架组装说明
组装相关步骤与之前发布的视频教程一致,可以参考操作(未包含GPU与扩展卡部分)。若你后续打算加装GPU,强烈建议初期就选用1500W或1600W电源。其余配置和视频教程一样(即使加装GPU和和扩展卡)。点击以下链接查看视频。提示:忽略视频中涉及GPU的部分,其余步骤完全相同。



另外,建议制作一个由多个小型风扇组成的散热墙(用尼龙扎带固定),直接对内存条进行强制风冷。虽然内存不会熔毁,但持续高负载数据传输时会产生热降频,导致性能衰减。我个人使用的是4组80mm风扇,构成小型散热器。

image004.jpg


主板升级指南
如若选择搭配 AMD EPYC 7V13 处理器,最好直接购买 MZ32-AR0 主板的 V3 版本,而不是购买 V1 版本后再进行升级。V1 版本可能不支持新的 Milan 处理器。若购买了V1版本,可能还需要通过V2版的CPU进行初始升级。 我不清楚具体过程如何,但大致流程应该差不多就是这样。  要想将V1版本的主板升级至V3版本,根据我的经验,你可以通过 BIOS 更新将 V1 版本的主板直接升级到最新版本,然后获取一个 V3 版本的早期 BIOS 更新并运行它。之后,你就可以从该页面更新到最新的 V3 版本 BIOS。目前(截止撰写本文),主板最新的 BIOS 版本是 M23_R40。

本地AI自托管软件配置
相较于之前的教程,此部分操作将变得更加棘手。是的,你可以在裸机Proxmox环境中部署Ollama。但是这样做好吗?个人而言,我并不建议。这并非明智之举。其实现在你有两种选择,我向将你展示其中一种方案。关于另一种方案,我需要先对其进行测试并查看性能影响,之后才会推荐它。这种方案的做法是在独立的LXC或虚拟机(VM)中运行Ollama。如果你有一直遵循我往期的LXC与Docker的配置指南,就请按照此方法操作。但现阶段我建议你安装在虚拟机中。除此之外,我正埋头研发一种更为统一的方案,将相关技术整合到AI服务器中,实现AI本地化自托管功能,但这需要时间。

想要于裸机服务器或Proxmox 虚拟机 上安装我们的 Ubuntu 24?
基本上,如果你想要精简并搭建全新环境,应该直接在裸机上安装 Ubuntu 24.04 服务器版。或者,你也可以按照之前的 Proxmox 指南 进行设置。你必须自己拿定主意,并承担结果。你也可安装桌面环境,不过这并非必须,我也不会演示安装过程。因为是在服务器上运行服务,所以大胆使用命令行界面(CLI)吧!

设置服务器主板BMC MZ32-AR0
将 MZ32-AR0 以太网和 BMC端口连接到本地网络。如果你有像opnsense或pfsense这样的防火墙路由器,你可以检查ARP表,找到你的端口,获取该 IP 地址。在我的实例中,IP地址为 https://192.168.1.XX,当我登录时,它会立即要求输入用户名和密码。默认用户名是 admin。密码应该就在你的主板的MZ32-AR0标签下方的贴纸上。下面是我拍的照片。它是带有条形码的标签。我记得不是很清楚,但大致是去掉前面的 3/C/ 部分,剩下的 6 个或 11个字符就是初始密码。当你最终登录后,进入
“主页 > 设置 > 网络 > 网络 IP 设置”,

为你的主板设置一个静态IP。若需使用本地 DNS 服务,请同时进行本地 DNS 服务器与NTP 服务器配置。后续你将经常登录此界面,所以可以将其保存为书签或做其他标记。

image006.jpg


下一步,进入侧边栏上的远程控制。它将带你进入一个新页面,其中有 HTML5 查看器选项。在继续下一步骤之前,我建议通过有线网络连接执行此操作,因为我们将通过网络发送一个较大的 ISO 文件,用于稍后安装 Ubuntu 24.04。从Ubuntu的下载页面获取 ubuntu 24  的服务器版本的ISO文件。该文件大约有2.5GB。将其连接到右上角的 HTML5 查看器中。


image007.png



单击启动后,ISO文件加载过程会稍微加速起来。如果服务器尚未开启,现在就要打开它。一旦服务器启动并运行起来,界面上的KB数值会开始逐渐增加。点击"屏幕"部分,等待技嘉(Gigabyte)品牌logo出现。按下 DEL 键进入BIOS。把所有设置恢复成默认值,然后保存并退出。待系统重启后,再次进入BIOS界面,现在我们要开始更改一些设置。首先,指定你的启动驱动器。你可保持UEFI模式,这无关紧要。如若遇到硬盘问题,传统模式(Legacy mode)能减少一些麻烦。

以下是你需要查找并更改的设置:

  • NUMA节点每插槽配置(NPS) → 设为1
  • 核心复合体模组(CCD) → 设为自动
  • 同步多线程(SMT) → 关闭
  • 安全虚拟化模式(SVM) → 关闭(若在Proxmox/虚拟化环境中运行可开启,会有轻微性能损耗)
  • 输入输出内存管理单元(IOMMU) → 关闭 (若在Proxmox/虚拟化环境中运行可开启,会有轻微性能损耗
  • 热设计功耗配置(cTDP) → 调整为200(适用于EPYC 7702处理器)
  • 确定性控制 → 手动模式,随后将滑块调至"性能"
  • 快速电源策略 → 选择"性能"
  • 最大加速频率(BoostFMax) → 手动模式
  • 最大加速频率值 → 设为3400MHz(适用于EPYC 7702)

完成上述设置后保存并再次重启。当出现启动画面时,根据屏幕底部提示按F12/F11/F10(我忘记要按哪一个键了,启动Logo页面底部会显示)进入BIOS启动菜单。选择"AMI虚拟光驱"选项。若设备已连接网线,应该很快就能进入Ubuntu启动界面。继续进行安装:设置一个你不会轻易遗忘的用户名和密码,勾选"设置SSH服务器"选项,以便后续远程登录访问。安装成功后,系统将重启,需按回车键确认继续。重启完成后,应该会回到一个终端界面,提示你输入用户信息:用户名和密码。输入以下命令使得配置生效:

ip a
记录下显示的IP地址。现在可回到桌面上本地终端软件(Windows/MacOS/Linux),关闭HTML5远程查看器。在本地终端窗口,替换为你的实际信息,输入:

ssh 用户名@IP地址

安装其他软件包
有一组命令可供运行。我省略了与GPU 相关的部分,但如果你的设备包含 NVIDIA GPU,你可在最后安装相应驱动。以下为命令行:

sudo apt update && sudo apt upgrade-y && sudo apt install -y htop git glances nano lsof unzip

设置静态IP地址
在命令行界面输入:

sudo netplan generate

然后,你可以通过以下命令编辑默认配置:

sudo nano /etc/netplan/50-cloud-init.yaml

它最初看起来会像这样。我们将编辑 eno1,即主板上的物理 RJ-45 网络接口。忽略我的 enp65s0np0,那是一张额外的网卡。

image008.png


使用方向键并键入,使其如同下图。为了方便起见,直接使用你当前的IP地址,以免过程复杂化。在本实例,我使用200作为我的静态IP,而我的路由器地址通常都是192.168.1.1,一个常见地址。

image009.png


现在,我们先得把这个网路配置方案给存下来,方法就是用CTRL-X键退出编辑,然后确认保存时按Y键。
从编辑器回到终端后,输入以下命令使得配置生效:

sudo netplan apply

至此,你的网络已成功设置为静态IP。现在你可以重启系统,通过SSH再次登录以确保设置生效。

安装Ollama
接下来我们通过以下命令部署Ollama服务

sudo tar -C /usr-xzf ollama-linux-amd64.tgz
sudo useradd -r-s /bin/false -U -m -d /usr/share/ollama ollama
sudo usermod -a-G ollama $(whoami)

上述命令将创建一个Ollama用户,并将Ollama安装到/usr/share/ollama文件夹中。默认情况下,模型将存放在/usr/share/ollama/.ollama/models/目录下。

服务环境变量配置
现在我们需要设置一些在 ollama 启动时运行的环境变量。此项操作对于解决并行问题至关重要。

sudo nano/etc/systemd/system/ollama.service

同时,我们将添加额外的环境变量配置行。下方的列表列出了所有变量。我们不会全部都使用,这里只是提供一个快速参考。

环境变量:
-OLLAMA_DEBUG: 调试模式,显示额外的调试信息,例如OLLAMA_DEBUG=1
-OLLAMA_HOST 服务器IP地址 (默认地址为 127.0.0.1:11434)
-OLLAMA_KEEP_ALIVE :模型在内存中保持加载时长(默认5分钟) -OLLAMA_MAX_LOADED_MODELS :每个 GPU 上可加载的最大模型数量
-OLLAMA_MAX_QUEUE :请求队列的最大长度
-OLLAMA_MODELS: 模型目录路径
-OLLAMA_NUM_PARALLEL:最大并行请求处理数
-OLLAMA_NOPRUNE:启动时,禁止清理模型blob
-OLLAMA_ORIGINS: 允许访问、用逗号隔开的来源列表
-OLLAMA_SCHED_SPREAD:始终在所有 GPU 上调度模型
-OLLAMA_FLASH_ATTENTION:启用 Flash Attention
-OLLAMA_KV_CACHE_TYPE:K/V 缓存的量化类型(默认是f16)
-OLLAMA_LLM_LIBRARY:设置LLM库,绕过系统的自动检测
-OLLAMA_GPU_OVERHEAD:为每个 GPU 保留部分VRAM(以字节为单位)-
OLLAMA_LOAD_TIMEOUT:允许模型加载停滞多长时间后放弃(默认5分钟)

以下是我设置完成后的示例。至于GPU相关变量,除非你有GPU,否则你不需要(也不应该)输入任何GPU相关的变量。

image011.png


依然是按CNTRL-X 退出编辑,再按Y保存文件。这时你应该输入以下命令:

sudo systemctl daemon-reload
sudo systemctl start ollama
nproc


现在,各个变量设置得十分理想,nproc输出结果理应为64。若输出结果为128,你应禁用SMT再次操作。若输出结果为32或者96,你则需要检查NPS与CCD的设置。确认输出结果为64后,你就可以进行下一步了!

下载Deepseek671b模型
现在,输入以下命令,下载ollama的Deepseek671b模型。模型将占用大约400GB的磁盘空间,希望你的NVMe存储设备性能吃得消。

ollama pull deepseek-r1:671b

下载过程需要一点时间,这期间不妨想想你的出站流量账单吧......

安装OpenWEBUI
我们需要在docker或python环境中运行OpenWEBUI。此处我将演示如何在docker进行部署。注意:确保没有安装会造成冲突的垃圾软件。

for pkg in docker.io docker-docdocker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-getremove $pkg; done

安装Docker镜像库

#添加Docker的官方GPG密钥:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSLhttps://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

#将此镜像库添加到 Apt 源列表中:
echo \
"deb [arch=$(dpkg --print-architecture)signed-by=/etc/apt/keyrings/docker.asc]https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo"$VERSION_CODENAME") stable" | \
  sudo tee/etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update

接近尾声:安装 Docker

sudo apt-get install docker-cedocker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y

安装 Dockge以及 Docker 容器管理器Dockge
在此实例中,Docker 和Dockge 的数据目录位于 /opt/dockge,它们提供了一个易于用户操作的界面。

sudo mkdir -p /opt/stacks /opt/dockge
cd /opt/dockge
docker compose up -d

现在,你可以进入 Docker 管理器来完成其余的步骤。如果你不知道 LXC 的 IP 地址,请在管理器的网络设置里查找。在找到的地址后附加 :5001,
例如 http://192.168.1.200:5001 是我的地址。进行首次访问时,你需要设置用户名和密码。请把它们都记下来。现在,你可以开始为 OpenwebUI 创建你的 Docker 容器了。
请将以下命令粘贴进你的 OpenwebUI 的 compose 文件里:


version: “3.3”
services:
open-webui:
   ports:
     – 7000:8080
   volumes:
     – open-webui:/app/backend/data
   container_name: open-webui
   restart: always
   image: ghcr.io/open-webui/open-webui:latest
volumes:
open-webui: {}
networks:
dockge_default:
   external: true

点击保存并运行。首次运行时,它会先下载镜像,后续你可以点击更新键轻松完成更新。管理器显示为运行状态后,查找IP后缀为7000的地址。在本例地址为http://192.168.1.200:7000。之后,系统会要求你设置登录凭证,请务必妥善保存。终于,我们离胜利只剩一步之遥了!呼!

将OpenWEBUI连接至Ollama

进入/admin/settings界面,通过点击"+"号将OpenWEBUI添加本地服务器,如下图所示。本例使用地址为192.168.1.200:11434,需替换为你设备实际的IP地址。连接成功后,屏幕会显示绿色弹窗"成功连接"。

image013.png


点击Ollama管理图标,在你完成下载 Deepseek 的 LLM 模型后,它会出现在删除下拉菜单中。
image015.png


恭喜你!离成功只差临门一脚了!不要着急离开设置界面,还剩最后几步!

设置模型高级参数

点击界面的笔形图标,如下图所示。

image017.png

现在,你可以自由编辑高级参数。切记每次编辑后保存!

image019.png

如果你没有连接GPU,就把GPU设置为 0;
模型推理性能级别选择低效率(另外还有中等/高效,默认中等);
上下文长度设为16364(一般16k即可适用,若需更高长度则需增加内存或GPU资源);
系统任务线程数设为62(此处预留了一些空闲线程保证运行流畅性);
启用mlock,可以防止内存分页到磁盘。
其余参数可自行调试或参考模型卡配置。另外,想要获得160K上下文长度完整体验,内存配置要求2TB左右......且推理速度也会显著下降。
进行任何参数编辑都要记得保存!

设置用户偏好设置
你可以根据自己的喜好更新用户偏好设置,但请将用户登录活跃设置为 3 小时左右。设置完成后点击保存。

image021.png

看着有点怪,但这个确实是用户设置界面,之前的才是管理员设置界面。

模型运行测试
天啊!终于走到了这一步!干得真棒,我真为你感到骄傲!现在,点击窗口左上角的“新聊天”框吧。Deepseek满血版671B模型已经就在那了。向它打个招呼吧。干得漂亮!

基准测试Deepseek R1 671b 性能
终于,我们成功裸机部署了功能齐全的完整版Ollama+OpenWEBUI。我确信市场上还有其他优秀AI运行器,如llama.cpp,exo和vLLM,但需待我深入掌握后再分别出独立教程。最近,我成功完成Llama.cpp相关编译,基准测试和运行,结果也表现良好,也许我会优先上传其安装指南。Llama.cpp框架参数调节空间极大,潜力十足;而vLLM过于复杂,上手难度较大;exo虽简单,但每次启动后都会崩溃。总之,我还没空一一进行调试,但正如大家所说的......我们很快就会见面!

250303-How To Run Deepseek R1 671b Fully Locally On a $2000 EPYC Server.pdf

1.27 MB, 下载次数: 1

全文

分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

344 积分
36 主题