恭喜 — 你决定踏入这个混乱、刺激、有时甚至有些荒诞不经的LLM验证世界!也许你的CTO让你“快速启动一个模型”,就像他说的那样。也许你正踏上证明Deepseek-R1是下一个大事件,或至少比你公司之前尝试的AI驱动的开源AI合作或将其输出整合到你自己的应用程序中更成功的旅程。
通常,即使是验证这种类型的任务也会让你陷入两个兔子洞之一:首先,你在本地机器上设置这一切,这种方式既脆弱又不可重复,而且绝对没有 GPU 加速。其次,你过于复杂化,结果在还没有实现“hello, world”的情况下,已经部署了一个庞大而昂贵的系统。
今天,我们将向你展示一个刚刚好的设置——包括ngrok、Deepseek和Ollama——这是完美的设置,帮助你测试、合作并验证像Deepseek-R1这样的AI模型,而不必让它们暴露在互联网上。让我们开始吧,不要等到有人建议重新训练GPT-2来省钱。
为什么要将你的AI开发连接到外部CPU/GPU计算最直接的选择是像开发其他项目一样在自己的开发环境中开发你的 LLM,提交更改并推送到像 GitHub 这样的 Git 代码库。
Rodrigo Rocco 例如,他在推特上的展示(https://twitter.com/rrmdp/status/1727693258791305446)让我们感到惊喜,他展示了如何在当地运行 AI 模型并通过 ngrok 隧道对外发布结果。不过,本地优先模式也存在一些限制。
首先,最强大的LLM需要16GB、32GB甚至更多的RAM,再加上一个独立的GPU来处理特定于LLM的工作负载。你现在的电脑可能达不到这么高的要求,而且升级的花费可能超出预算。或者,即使你有一台较新的电脑,你也不想在本地微调大型语言模型时,占用资源,影响其他工作的速度。
还有关于协作和最终托管的一些限制。本地开发工作流程使得他人难以轻松与你合作,除非你让你的工作站连接到公共互联网并保持全天候运行。同样,当最终过渡到API时也是如此——最好选择一个你无需迁移的平台进行开发。
当我们具体谈论用于LLM开发的远程计算时,你有两个选项。
- 托管:托管平台的工作方式类似于SaaS,它们在其基础设施上运行您的LLM,并为您提供一个简单的网络应用或API来探索。目前已经有很多AI/LLM平台,例如RunPod、Mystic、BentoML等。主要的云提供商还为训练和部署LLM提供了平台,例如谷歌的Vertex AI或AWS的AI服务。托管平台在简单性方面胜出,但不提供隐私和合规性保证,同时往往价格较高。
- 自托管:当你自己托管一个LLM时,你需要在裸机虚拟机(VM)上自己安装和配置AI工具包。有一些声称可以简化流程的LLM“调度器”工具,例如Trainy,但同时也带有学习曲线。自托管一般在长期更经济,但构建一个可行的AI开发堆栈的责任就落在你身上。
托管选项非常适合快速发展的初创企业,这些公司需要以最少的基础设施成本来启动和训练大规模语言模型,但你需要一个既属于你组织又持久稳定的解决方案,以支持持续开发。
在这种情况下,自己托管是最好的选择,但也会带来新的技术难题。
要安全地将你的本地工作站连接到远程服务,你需要处理代理服务器、端口转发设置、防火墙等问题。如果你通过正常流程——向你的 DevOps 同事正式提出请求——将该服务投入生产,可能需要几周来编写代码并进行协调,以确保安全和合规。
话说,像 Softwrd.ai 和 Factors.ai 这样的公司已经在使用 ngrok 连接远程的 CPU/GPU 计算资源,快速推出新的基于 AI 的 API,你也不是第一个用这种工具来实现概念验证的人。
规划您的外部AI处理技术堆栈你们已经完成了构建AI概念验证工作流的所有技术要求,——现在到了构建新技术时最令人期待的部分:选择你们的技术栈。
根据 CTO 的目标和你已经发现的障碍,一个可行的选择是:
- 带有GPU加速的Linux虚拟机:你需要一个持久且可配置的机器来处理你的LLM的响应。由于我们栈的接下来两部分可以在任何运行Linux的地方运行,你可以在最适合你组织的任何地方启动这台虚拟机实例。唯一的前提是你的虚拟机实例需要有GPU加速,并且可以安装Ollama和ngrok。
- Ollama:Ollama是一个开源项目,简化了开发者运行、交互和训练LLM的方式。它的初衷是在本地运行,但由于它可以在任何运行Linux的地方运行,且不需要网页界面,因此很容易安装在任何地方。
- ngrok:你将使用ngrok的通用入口平台来安全而持久地访问Ollama及其背后的GPU计算资源。ngrok简化了安全连接到远程服务的网络和配置,同时还提供了你需要的认证、授权和可观测性,以实现一个长期可行的解决方案。
这绝不是连接你的本地开发流程至远程计算资源的唯一方式。我们选择它是因为它易于上手。
- 你可以在大约 15 分钟内开始使用许多流行的开源大模型,比如 Deepseek-R1。
- 你可以通过 GCP 控制台管理你的虚拟机生命周期,在不使用时可以停止它,以节省预算,尤其是在你不积极开发 AI 时。
- 与托管平台不同,你拥有节点及其数据。
- 与像 Colab Pro 这样的低成本平台不同,此解决方案是持久的,可以保存数据,并允许你在将来微调现有的模型,但也有以下几点需要注意。
这样做也有一些缺点:
- 从Linux和网络的角度来强化你的虚拟机,以防御网络攻击……我相信你的IT/DevOps同行会很乐于助人。
- 与纯粹的托管解决方案相比,虚拟机需要更多的设置和维护。
- 从长远来看,本地硬件可能更经济。
- 当前这个堆栈允许你部署现有的开源模型并自定义某些参数,但不能进行深层的重新训练或微调。
注意:你可以使用任何云服务商来启动这个VM——我只是因为在当时GCP有一些强大的GPU选项,所以选择用了GCP。
直接转到 Google Cloud Console 然后新建虚拟机
在 机器配置 下,选择 GPU 并挑选符合你的预算和需求的 GPU 类型。对于机器类型,选择一个高内存实例,比如 n1-highmem-2。在 启动磁盘 部分,将磁盘大小增加到 100GB 以确保安全,然后点击 选择映像 获取一个优化的操作系统,例如 Linux 上的深度学习。在 防火墙 部分,点击 允许 HTTPS 流量 —ngrok 会使用此设置以便你可以从任何地方访问你的大型语言模型。
这应该是你需要的基础,用来运行远程 AI 计算任务,大约每小时 0.35 美元。
给你的实例一些时间来启动完毕。启动完毕后,使用你偏好的方法通过 SSH 登录到它。第一次登录时,虚拟机会让你选择是否安装 Nvidia 驱动程序——按 y
,然后按 Enter
,因为你多付的费用是为了获得 GPU 计算的使用权。
完成之后,你可以运行 nvidia-smi
来验证你的 GPU 加速正常工作。
nvidia-smi
Fri Jan 19 18:15:27 2024
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 525.105.17 驱动程序版本: 525.105.17 CUDA 版本: 12.0 |
|-------------------------------+----------------------+----------------------+
| GPU 名称 持久模式-M | 总线-Id 显示设备-A | 易失性未校正的ECC |
| 风扇 温度 性能 功耗:使用/上限 | 内存使用 | GPU 使用率 计算模式 |
| | | MIG模式 |
|===============================+======================+======================|
| 0 Tesla T4 关闭状态 | 00000000:00:04.0 关闭状态 | 0 |
| N/A 70°C P0 33W / 70W | 2MiB / 15360MiB | 9% 默认设置 |
| | | N/A |
+-------------------------------+----------------------+----------------------+
切换到全屏模式 退出全屏模式
安装一下 Ollama
最快使Ollama运行起来的方法是他们的Bash一行命令,但你也可以选择手动安装或使用Docker。
您可以使用以下命令安装OLLAMA:
curl -fsSL https://ollama.com/install.sh | sh
点击全屏 点击退出全屏
安装了 Ollama 之后,拉取并启动 deepseek-r1。
ollama pull deepseek-r1
这是一条从ollama拉取deepseek-r1的命令。
全屏/退出全屏
你现在可以在Ollama上使用Deepseek-R1,它已经在端口11434
上运行着。这很棒,但由于该服务器是在远程虚拟机上运行,你需要一种方法来连接聊天和获取回复,而不需要通过ssh
登录到远程虚拟机,也不需要暴露端口11434
,以免被攻击者和机器人发现并利用。
如何安装和启动 ngrok
要下载 ngrok 代理程序,请访问下载页面或快速入门文档,获取适用于各种 Linux 发行版的多个选项。请登录 ngrok 控制面板,获取您的 Authtoken,并按照指引连接您的账户。
在你 ngrok 控制台开启时,预留一个新的 ngrok 域名,这是你使用此堆栈进行所有未来 LLM 训练操作时保持隧道链接一致的唯一方法,你可以选择使用 ngrok.app
的子域名或你自己的 自定义域名。
以下命令将创建一个 ngrok 端点,该端点将所有来自 {YOUR_LLM_DOMAIN}.ngrok.app
的流量路由到你配备了 GPU 的虚拟机上的 11434
端口。根据 Ollama 的文档,--host-header
标志确保 Ollama 能接收到预期的 Host
标头。ngrok 代理会立即开始将所有 API 请求转发给 Ollama 和你的新 Deepseek-R1。
ngrok http 11434 --url={YOUR_LLM_DOMAIN} --host-header="localhost:11434"
# 这个命令用于将本地端口11434通过ngrok发布到互联网
进入全屏 退出全屏
试试你的第一个大型语言模型请求你现在可以直接给你的Deepseek-R1 GPU模型发API请求了。
curl https://{YOUR_LLM_DOMAIN}/api/generate -d '{
"model": "deepseek-r1",
"prompt":"为什么天空是蓝色的?",
"stream": false,
}'
进入全屏模式;退出全屏模式
根据你所选择的虚拟机的规格,你很快就能看到类似的结果。
{
"model":"deepseek-r1",
"created_at":"2025-01-27T21:46:52.004359039Z",
"response":"\u003cthink\u003e\n\n\u003c/think\u003e\n\n天空显得蓝色是因为一种称为瑞利散射现象的现象。当阳光照射到地球的大气层时,它与空气中的分子和微小颗粒相互作用。蓝色光由于其波长较短,比其他颜色更频繁地散射,从而与大气层有更多互动。这就是为什么我们在白天看到天空是蓝色的原因。\n\n此外,在日出或日落时,天空通常会显得红色或橙色。这是因为瑞利散射与我们的眼睛如何感知光线的方式相结合,当阳光穿过大气层的不同层次时,蓝色光被散射出去,因此我们看到天空呈现红色或橙色。",
"done":true,
"done_reason":"stop",
"context":[151644,10234,374,279,12884,6303,30,151645,151648,271,151649,271,785,12884,7952,6303,4152,311,264,24844,2598,13255,62969,71816,13,3197,39020,24491,9237,594,16566,11,432,83161,448,34615,323,2613,18730,304,279,3720,13,8697,3100,1136,10175,803,13814,1091,1008,7987,1576,432,34192,23327,92859,323,83161,803,448,279,16566,13,1096,71816,2456,374,3170,582,1490,279,12884,438,6303,2337,279,1899,382,49574,11,2337,63819,476,42984,11,279,12884,3545,7952,2518,476,18575,13,1096,374,4152,311,264,24844,2598,13255,62969,71816,10856,448,279,1616,1039,6414,44393,3100,13,3197,39020,16211,1526,13617,315,279,16566,11,279,6303,3100,374,36967,3123,11,9380,279,5021,92859,320,1151,323,18575,8,311,40736,279,12884,594,11094,13],
"total_duration":43516935923,
"load_duration":7419493865,
"prompt_eval_count":9,
"prompt_eval_duration":1455000000,
"eval_count":138,
"eval_duration":34639000000
}
进入全屏模式,退出全屏模式
确保你的Deepseek模型不受未经授权的使用现在你已经运行了一个大型语言模型,你肯定想限制谁能够访问它。
通过我们的流量策略引擎,ngrok提供了许多可能的选项。
为了简化,我们将使用流量政策来实现基本身份验证操作。关闭你在虚拟机上的 ngrok
,然后创建一个名为 policy.yaml
的新文件,内容如下所示。
---
on_http_request:
- 操作:
- 类型: 基本身份验证
配置:
凭证:
- user1:password1
- user2:password2
全屏模式 退出全屏
这些 YAML 行实现了基本认证功能,用于检查每个请求中的 Base64 编码的凭证信息。所有没有这些凭证的请求都会直接从 ngrok 网络收到 401 Unauthorized
响应,而不会触及你的虚拟机(VM)。你还可以为团队中的不同成员添加最多 10 组凭证。
使用你的新 Traffic Policy 文件重新启动 ngrok 代理程序。
运行下面的命令来启动ngrok隧道:将{YOUR_LLM_DOMAIN}
替换为你自己的域名。使用这个命令, 你可以把本地端口映射到互联网:
ngrok http 11434 --url={YOUR_LLM_DOMAIN} --host-header="localhost:11434" --traffic-policy-file=policy.yaml
全屏显示 退出全屏
当你下次请求Deepseek-R1时,使用curl
的-u
标志,该标志会自动将你的凭证进行Base64编码。
curl -u 用户名:user1:password1 \
https://{YOUR_LLM_DOMAIN}/api/generate -d '{
"model": "deepseek-r1",
"prompt":"ngrok为什么这么好用?",
"stream": false,
}'
切换到全屏模式;退出全屏
ngrok 和 Deepseek-R1 接下来会有什么东西出现?老实说,我们目前还不太确定。事情进展得挺快的。
最重要的是,你现在有一个有效的测试环境,如Deepseek-R1这样的开源LLM,不论你是用来与同事合作,尝试将其集成到现有应用中,还是仅仅想比较这个新模型的结果与之前用过的LLM。
在您尝试或测试Deepseek或其他大规模语言模型并想要使您的部署更安全时,这里有一些建议:
- 了解我们的流量策略引擎,它允许你过滤、管理和对来自你 API 网关的流量采取行动。
- 实现不同的访问控制和安全措施,例如JWT 验证和IP 限制,以防止任何组织外部的人访问你的大规模语言模型(LLM)。
- 了解如何将你的 ngrok 代理转换为一个通用的 API 网关,适用于所有 API。
如果您觉得这个项目有什么特别之处,欢迎告诉我们。可以通过推特@ngrokHQ 或领英(LinkedIn)联系我们。如果您在生产环境中使用 ngrok 时有其他疑问,可以参加我们每月的直播答疑(每月 Office Hours 直播),届时我们的开发者和支持团队将进行演示和答疑。
共同学习,写下你的评论
评论加载中...
作者其他优质文章