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
策略: 允许

安全组规则有优先级,数值越小越优先。如果两条规则冲突,高优先级(数字小的)生效。建议把所有规则按优先级排好,避免混乱。

关键点:安全组是有状态的。你允许了入方向的请求,系统会自动允许对应的出方向响应。所以一般不需要配出方向规则,默认全放通就行。

云端环境搭建流程 创建虚拟机实例 创建密钥对并绑定 配置安全组规则 SSH 连接测试 安装依赖与框架 关键检查点 ① 安全组22端口是否对IP开放? ② 私钥权限是否为400? ③ 实例是否有公网IP? ④ 是否用 root 或 ubuntu 用户登录?

4.4 实操:完整搭建流程

我整理了一个快速上手的步骤清单,跟着做就行。

  1. 开机器:登录云控制台,选择区域(建议选离你最近的,延迟低),选镜像(Ubuntu 22.04 LTS 我比较常用),配实例规格,加一块数据盘,分配公网IP。
  2. 配SSH:创建密钥对,下载私钥。绑定到实例。记下公网IP。
  3. 设安全组:默认安全组只有22端口。加一条80端口(如果需要),来源设为0.0.0.0/0。如果只想自己访问,换成你IP/32。
  4. 连上去:终端执行ssh -i ~/keys/my-key.pem ubuntu@<公网IP>。第一次连输入yes确认指纹。
  5. 初始化:更新包管理器,安装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。
  • 有状态规则意味着你只操心入方向,出方向默认全通。

环境搭好之后,下一件事就是往里面装模型框架和靶点发现工具了。不过那是后面章节的事。你先把今天的操作跑一遍,出了问题回来对照检查。我保证,踩过这些坑之后,你今后搭建任何云端环境都会顺手很多。