PAI-DSW训练完模型怎么部署成在线Web服务?手把手教你用云服务器上线
很多用户在用 PAI-DSW(Data Science Workshop)完成模型训练后,都会卡在一个关键问题上:模型本地跑得好好的,怎么让它变成一个别人能通过浏览器访问的 Web 服务?这个问题其实不难,但涉及几个关键步骤,尤其对刚接触云服务器的新手来说,容易在环境配置、端口开放、服务启动这些环节出错。
下面我们就围绕“把 PAI-DSW 训练好的模型部署成 Web 服务”这个目标,用一台通用的 Linux 云服务器,从零开始一步步搞定。
第一步:确认你的模型和依赖能独立运行
PAI-DSW 环境虽然方便,但它是个托管开发环境,不能直接对外提供 Web 服务。所以你得先把模型文件和推理代码“搬出来”,确保它们能在干净的 Linux 环境里跑起来。
- 导出训练好的模型(比如 PyTorch 的
.pt文件、TensorFlow 的.pb或 SavedModel 目录)。 - 整理推理脚本(通常是一个
predict.py或app.py),里面包含加载模型、预处理输入、返回预测结果的逻辑。 - 记录依赖包清单,比如用
pip freeze > requirements.txt导出当前环境的 Python 包。
这一步非常重要!很多用户直接复制代码到服务器就跑不起来,就是因为漏了某些依赖,或者路径写死了本地路径。
第二步:准备一台通用 Linux 云服务器
你需要一台支持自定义环境的云服务器,系统建议选 Ubuntu 20.04 或 CentOS 7 以上版本。购买时注意几点:
- 配置不用太高,2核4G 足够跑大多数轻量级模型服务。
- 系统盘建议 40GB 以上,留足空间装 Python 环境和模型文件。
- 公网 IP 必须有,否则别人无法访问你的服务。
服务器创建成功后,用 SSH 工具(比如 Xshell、Terminal)登录,用户名通常是 root 或 ubuntu,密码在购买后会通过站内信提供。
第三步:搭建基础运行环境
登录服务器后,先更新系统并安装必要工具:
Ubuntu/Debian
sudo apt update && sudo apt upgrade -y
sudo apt install -y python3 python3-pip git nginx
CentOS/RHEL
sudo yum update -y
sudo yum install -y python3 python3-pip git nginx
然后创建项目目录,把模型文件和代码上传上去(可以用 scp、宝塔面板或直接 git clone):
mkdir /opt/my-model-service
cd /opt/my-model-service
假设你已将代码推到 GitHub
git clone https://github.com/yourname/your-model-repo.git .
pip3 install -r requirements.txt
测试一下本地能不能跑通:
python3 app.py
如果没报错,说明环境基本 OK。这时候服务默认只监听 127.0.0.1,外网还访问不到。
第四步:用 Gunicorn + Nginx 暴露 Web 服务
直接用 Flask 或 FastAPI 自带的开发服务器上线是不安全的,我们需要用生产级部署方式。这里推荐 Gunicorn 作为应用服务器,Nginx 作为反向代理。
先安装 Gunicorn:
pip3 install gunicorn
启动应用(假设你的 FastAPI/Flask 应用对象叫 app,在 app.py 里):
gunicorn -w 4 -b 0.0.0.0:8000 app:app
这行命令的意思是:启动 4 个 worker,监听所有 IP 的 8000 端口。
接下来配置 Nginx,让它把 80 端口的请求转发给 Gunicorn:
sudo vim /etc/nginx/sites-available/my-model
写入以下内容(替换 your-server-ip 为你的服务器公网 IP):
server {
listen 80;
server_name your-server-ip;
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
启用配置并重启 Nginx:
sudo ln -s /etc/nginx/sites-available/my-model /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
第五步:检查防火墙和安全组端口
很多用户到这一步发现还是打不开网页,问题通常出在端口没放行。
你需要在云服务器控制台的“安全组”或“防火墙”设置里,确保以下端口对公网开放:
| 端口 | 用途 |
|---|---|
| 22 | SSH 登录(必须) |
| 80 | HTTP 访问 Web 服务(关键!) |
| 443 | HTTPS(可选,后续可配) |
注意:即使你在服务器上用 netstat -tuln 看到 8000 端口在监听,如果云平台的安全组没放行 80 端口,外部依然无法访问。
第六步:验证服务是否上线成功
现在打开浏览器,输入你的服务器公网 IP(比如 http://123.123.123.123),如果看到模型返回的 JSON 或网页界面,就说明部署成功了!
你可以用 curl 在服务器本地快速测试:
curl http://localhost/predict -H "Content-Type: application/json" -d '{"input": [1,2,3,4]}'
如果返回预测结果,说明后端逻辑没问题。
进阶建议:让服务长期稳定运行
上面的 Gunicorn 是前台进程,关掉 SSH 就会停止。要用 systemd 把它变成系统服务:
sudo vim /etc/systemd/system/my-model.service
内容如下:
[Unit]
Description=My Model Web Service
After=network.target
[Service]
User=root
WorkingDirectory=/opt/my-model-service
ExecStart=/usr/local/bin/gunicorn -w 4 -b 127.0.0.1:8000 app:app
Restart=always
[Install]
WantedBy=multi-user.target
然后启用服务:
sudo systemctl daemon-reexec
sudo systemctl enable my-model
sudo systemctl start my-model
这样即使服务器重启,你的模型服务也会自动拉起。
常见踩坑点总结
- 模型路径写死:代码里不要用绝对路径如
/home/user/model.pt,改用相对路径或环境变量。 - 依赖缺失:PAI-DSW 预装了很多包,但新服务器是干净的,务必用
requirements.txt安装。 - 端口冲突:8000 端口可能被占用,可用
lsof -i :8000检查。 - 权限问题:Nginx 默认以
www-data用户运行,确保它能读取你的项目文件(必要时chmod)。
只要按上面步骤一步步来,从 PAI-DSW 训练完模型到上线 Web 服务,其实并不复杂。关键在于环境隔离、端口开放、服务守护这三个环节别出错。现在,你的模型已经可以被任何人在浏览器里调用了!