传统开发转型AI:绕开算法,先跑通一个模型推理服务
传统开发转型AI,最现实的切入点是先把一个模型推理服务跑起来并能稳定访问,而不是从头补高数和算法。
你已有的 Linux、Docker、接口调试和日志排错能力,在推理部署环节几乎可以直接复用。
本文按这个思路,从环境检查到服务验证走一遍可执行的流程,适合有后端或运维基础、但没接触过模型部署的读者。
先确认机器是否具备推理条件
推理服务能不能跑,先看三件事:系统版本、Docker 是否可用、有没有可用的 GPU。
没有 GPU 也能用 CPU 跑小模型做流程验证,但速度会明显慢,适合调试接口而不是压测。
登录服务器后依次执行:
uname -a
docker --version
docker info | grep -i runtime
nvidia-smi
nvidia-smi 能输出显卡型号、驱动版本和显存占用,说明驱动正常。
如果提示命令不存在,先不要急着装模型,先确认这台机器是否真的带 GPU,以及驱动是否由云厂商镜像预装。docker info 里能看到 nvidia runtime,后续容器才能调用显卡。
预期结果是:系统信息正常返回、Docker 版本可读、nvidia-smi 显示至少一张卡。
任一项失败,先解决环境问题,再进入下一步。
用容器跑通一个最小推理接口
不建议一上来就部署大参数模型。
先用小模型或官方示例镜像验证“请求进得来、结果出得去”,把链路跑通。
以下以带健康检查的推理服务为例,目录结构如下:
mkdir -p /opt/ai-demo && cd /opt/ai-demo
准备一个 docker-compose.yml,核心是端口映射、GPU 声明和健康检查:
services:
inference:
image: your-inference-image:latest
ports:
- "8000:8000"
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 1
capabilities: [gpu]
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8000/health"]
interval: 30s
timeout: 5s
retries: 3
启动并观察状态:
docker compose up -d
docker compose ps
docker compose logs -f inference
docker compose ps 中状态变为 healthy 才算服务就绪。
如果一直是 starting,看日志里是否在加载模型权重,首次启动通常需要几十秒到几分钟,取决于模型大小和磁盘速度。
验证接口而不是只看容器状态
容器 Running 不等于服务可用。
用 curl 直接打健康检查和一次推理请求:
curl -s http://127.0.0.1:8000/health
curl -s -X POST http://127.0.0.1:8000/predict \
-H "Content-Type: application/json" \
-d '{"input":"hello"}'
健康检查返回 200 且响应体包含正常标识,推理请求能返回结构化结果,说明链路通了。
再从另一台机器用服务器公网 IP 访问同一端口,验证安全组或防火墙是否放行。
若本机通、外网不通,优先检查云控制台安全组入方向规则和系统防火墙,而不是改应用代码。
容易踩的坑和排查顺序
显存不足是最常见的失败原因。
日志里出现 out of memory 或 CUDA error 时,先用 nvidia-smi 看是否已有其他进程占用显存,再考虑换更小模型或限制并发。
不要盲目调大 batch size。
端口冲突表现为容器启动后立即退出。
用 ss -lntp | grep 8000 确认端口是否被占用,改映射端口前先停掉冲突进程。
容器内看不到 GPU,通常是启动时没声明 GPU 资源,或宿主机没装 NVIDIA Container Toolkit。
回到 docker info 检查 runtime 配置。
请求超时但日志无报错,多半是模型首次加载未完成,健康检查还没通过就发了业务请求。
等 healthy 后再测。
跑通之后补什么
服务能稳定响应后,转型的重点就清楚了:补请求日志和耗时统计,观察 P95 延迟;
补显存和 GPU 利用率监控,避免多服务争抢;
再学习模型量化、批处理等降低显存占用的手段。
这些都在你熟悉的运维和开发范围内,比从零啃算法更容易形成正反馈。
如果你还在犹豫先学什么,判断标准很简单:能独立部署并验证一个推理服务,再谈微调和训练。
先把这条最小链路跑通,后面的学习才有落点。