4. 云端环境搭建
做生物信息学的人,大部分时间都泡在终端里。我自己也是从本地服务器一路折腾到云端的。说实话,第一次在云上跑靶点发现模型时,光环境搭建就卡了我三天。后来摸清楚门道了,发现其实就是三件事:虚拟机、SSH、安全组。这三样搞定了,后面模型部署才顺。
4.1 选虚拟机实例
先讲虚拟机。我习惯叫它“云上的裸金属”,虽然实际上是虚拟化出来的。不同云厂商的叫法不一样,AWS叫EC2,阿里云叫ECS,腾讯云叫CVM。但本质都一样——你选配置、开机器、连上去用。
选实例规格要注意三点:
- CPU:靶点发现模型里,像AlphaFold2这种依赖大量矩阵运算的,GPU实例更合适。纯CPU跑Transformer推理也行,但训练就太慢了。我一般选4核起步,8核以上更稳。
- 内存:蛋白质序列处理经常要加载大字典。我踩过坑——选了2C4G的实例,跑ESM-1b序列编码时直接OOM。建议至少16GB起步,32GB以上更保险。
- 磁盘:模型权重文件和数据集加起来轻松几十GB。操作系统盘建议40GB,再加一块100GB以上的数据盘。用SSD,别省那点钱。
我用阿里ECSG7系列比较多,性价比不错。选的时候记得勾选“分配公网IP”,否则后面没法SSH。
| 用途 | 推荐实例 | vCPU | 内存 | GPU |
|---|---|---|---|---|
| 轻量预测 | ecs.g7.large | 2 | 8G | 无 |
| 序列编码 | ecs.g7.xlarge | 4 | 16G | 无 |
| 训练/推理 | ecs.gn7i-c16g1.4xlarge | 16 | 64G | NVIDIA A10 |
小技巧:我建议第一次选按量付费,跑通了再转包年包月。避免开错配置白花钱。
4.2 SSH 连接配置
虚拟机开了,怎么进去?SSH。几乎所有的云厂商都支持密钥对登录。我个人强烈反对用密码登录,尤其是公开的云端机器。
第一步:创建密钥对
在云控制台创建密钥对,下载私钥文件(.pem或.ppk)。保存好,别弄丢。我曾在项目里把私钥忘在临时电脑上,后来换机器连不上,只能重置密码。麻烦得很。
第二步:本地配置SSH
Linux/Mac系统直接终端操作,Windows推荐用PowerShell或者WSL。私钥权限要设对,否则会报错。
# 设置私钥权限(只有自己可读)
chmod 400 ~/keys/my-key.pem
# 连接实例(用公网IP或弹性IP)
ssh -i ~/keys/my-key.pem root@<公网IP>
第三步:测试连通性
第一次连接会提示确认主机指纹,输入yes就行了。如果连不上,八成是安全组没放行22端口,或者公网IP配错了。别慌,检查一下控制台。
避坑指南:我曾经在安全组里只开了22端口,结果部署模型时发现80端口没开,HTTP服务一直404。后来养成习惯,创建实例后第一时间把安全组规则配全。
4.3 安全组规则
安全组就是云上的防火墙。每个实例可以绑定一个或多个安全组。规则是允许或拒绝IP和端口。
核心原则:只开放必要的端口,来源IP尽量限制到最小范围。比如SSH只允许你自己的IP连,别开0.0.0.0/0。我见过有同事把22端口整个互联网放开,结果一天被扫了十几万次,机器日志全被刷爆。
常用端口清单
| 服务 | 端口 | 建议来源 |
|---|---|---|
| SSH | 22 | 你办公网IP段 或 本地IP |
| HTTP | 80 | 0.0.0.0/0(如需对外) |
| HTTPS | 443 | 0.0.0.0/0(如需对外) |
| Jupyter Notebook | 8888 | 你的IP 或 内网 |
| 深度学习框架API | 8000-9000 | 内网或特定IP |
配置示例(阿里云控制台)
# 入方向规则示例
协议类型: TCP
端口范围: 22/22
授权对象: 1.2.3.4/32 (你自己的公网IP)
优先级: 1
策略: 允许
# 再开一条80端口
协议类型: TCP
端口范围: 80/80
授权对象: 0.0.0.0/0 (允许所有人访问Web)
优先级: 2
策略: 允许
安全组规则有优先级,数值越小越优先。如果两条规则冲突,高优先级(数字小的)生效。建议把所有规则按优先级排好,避免混乱。
关键点:安全组是有状态的。你允许了入方向的请求,系统会自动允许对应的出方向响应。所以一般不需要配出方向规则,默认全放通就行。
4.4 实操:完整搭建流程
我整理了一个快速上手的步骤清单,跟着做就行。
- 开机器:登录云控制台,选择区域(建议选离你最近的,延迟低),选镜像(Ubuntu 22.04 LTS 我比较常用),配实例规格,加一块数据盘,分配公网IP。
- 配SSH:创建密钥对,下载私钥。绑定到实例。记下公网IP。
- 设安全组:默认安全组只有22端口。加一条80端口(如果需要),来源设为0.0.0.0/0。如果只想自己访问,换成你IP/32。
- 连上去:终端执行
ssh -i ~/keys/my-key.pem ubuntu@<公网IP>。第一次连输入yes确认指纹。 - 初始化:更新包管理器,安装Docker、Python、CUDA(如果带GPU)。
如果你用的是AWS,创建EC2时可以直接在“网络设置”里配安全组。阿里云ECS也是类似。大同小异。别被不同控制台界面吓到,底层逻辑都一样。
附:常用初始化命令(Ubuntu)
sudo apt update && sudo apt upgrade -y
sudo apt install -y docker.io git curl wget
sudo systemctl enable docker && sudo systemctl start docker
# 安装 conda(用于管理Python环境)
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh -b
source ~/.bashrc
记住,云环境搭建最忌心急。我当年第一次上云,光配安全组就搞了半小时,后来发现是没点“保存”。你想想看,点完规则一定要确认状态变成“已生效”。
我的习惯:每次建完虚拟机,先在本地ping一下公网IP,通了再接SSH。如果ping不通,八成是安全组ICMP协议没开。评估一下是否需要ICMP,大部分情况下开不开无所谓,但能帮你快速定位问题。
4.5 总结要点
- 实例规格按模型需求选,GPU跑训练,CPU跑推理,内存别省。
- SSH密钥对登录比密码安全百倍。私钥权限必须400,否则客户端会拒绝。
- 安全组规则遵循最小权限原则。只开放需要的端口,来源IP精确到/32。
- 有状态规则意味着你只操心入方向,出方向默认全通。
环境搭好之后,下一件事就是往里面装模型框架和靶点发现工具了。不过那是后面章节的事。你先把今天的操作跑一遍,出了问题回来对照检查。我保证,踩过这些坑之后,你今后搭建任何云端环境都会顺手很多。