跳转至

云计算与生信(AWS / 阿里云)


一句话说明

当你的笔记本跑不动30个全基因组、或者实验室服务器排队要等一周时,云计算让你花几块钱就能临时租到一台128核512G内存的服务器——用完就还,按小时付费。


为什么生信需要云计算

本地 vs 云的对比

维度本地服务器/电脑云计算(AWS/阿里云)
硬件成本一台好服务器20-50万元按小时计费,用多少花多少
配置时间采购→到货→机房→装系统→装软件=几周几分钟就能启动
扩展性内存不够?买新的再等几周点一下鼠标升级到1TB内存
维护需要人管硬件、散热、UPS云厂商全管
典型瓶颈CPU不够/内存不够/硬盘满了花钱就能解决
适合场景日常小规模分析突发大批量计算/课题组没服务器
数据安全数据在自己手里需要配好权限和加密

白话类比

  • 本地服务器 = 自己买车:一次性花大钱,后续保养自己管,不用的时候还占车位
  • 云服务器 = 打车/租车:用的时候花钱,不用的时候不花钱,但长期用可能比买车贵

生信场景中的典型需求

分析任务需要的资源云上推荐配置
全基因组比对(30x WGS)32核, 128G内存, 1TB SSDm5.8xlarge (AWS) / ecs.g7.8xlarge (阿里云)
宏基因组组装 (MEGAHIT)16核, 256G内存r5.8xlarge (AWS) / ecs.r7.8xlarge (阿里云)
单细胞10x分析8核, 64G, GPU可选m5.2xlarge 或 p3.2xlarge(含GPU)
简单差异分析4核, 16G足够t3.xlarge (AWS) / ecs.t6-c1m2.xlarge (阿里云)
机器学习训练GPU, 32G显存p3.2xlarge (V100) / ecs.gn6v-c8g1.2xlarge

AWS 生信相关服务

核心服务白话解释

EC2(Elastic Compute Cloud)— 云服务器

白话说:就是远程租一台电脑,你可以选CPU型号、内存大小、硬盘类型——和你自己电脑一样用,SSH登录进去装软件跑分析。

# ===== 常见EC2实例类型(生信用) =====

# t3.medium   —  2核 4G   — $0.0416/小时 — 轻量测试
# m5.xlarge   —  4核 16G  — $0.192/小时  — 日常分析
# m5.4xlarge  — 16核 64G  — $0.768/小时  — 中等规模
# r5.8xlarge  — 32核 256G — $2.016/小时  — 内存密集型(组装)
# c5.9xlarge  — 36核 72G  — $1.53/小时   — CPU密集型(比对)
# p3.2xlarge  —  8核 61G+V100 GPU — $3.06/小时 — 深度学习

# 实例命名规则:
# m = 通用型(memory平衡)
# c = 计算优化型(CPU强)
# r = 内存优化型(RAM大)
# p/g = GPU实例
# 数字 = 代(5=第5代,越新越便宜)
# xlarge/2xlarge = 大小规格

S3(Simple Storage Service)— 对象存储

白话说:就是云上的"网盘",不过它不是文件夹结构而是"桶(bucket)+对象(object)"。特点是便宜、无限容量、可以和其他AWS服务无缝对接。

# ===== S3 基本操作(用AWS CLI) =====

# 安装AWS CLI
# pip install awscli
# aws configure  # 输入Access Key和Secret Key

# 创建存储桶
aws s3 mb s3://my-bioinfo-data
# mb = make bucket,创建一个叫my-bioinfo-data的桶

# 上传文件到S3
aws s3 cp sample1.fastq.gz s3://my-bioinfo-data/raw/
# cp = copy,把本地文件上传到S3的raw/目录

# 上传整个目录
aws s3 sync ./results/ s3://my-bioinfo-data/results/
# sync = 同步,只上传有变化的文件

# 下载文件
aws s3 cp s3://my-bioinfo-data/results/output.txt ./
# 从S3下载到本地

# 查看桶里的文件
aws s3 ls s3://my-bioinfo-data/raw/
# ls = list,列出文件

# S3存储费用(美东区域,2025年参考价):
# 标准存储:~$0.023/GB/月
# 低频访问(IA):~$0.0125/GB/月
# Glacier(归档):~$0.004/GB/月
# 100TB原始测序数据一个月标准存储≈$2300

AWS Batch — 批量计算

白话说:你提交一堆任务(比如100个样本的比对),AWS Batch自动帮你开机器、分配任务、跑完关机。你不用管"开几台机器"这种事。

# AWS Batch的工作流程:
# 1. 你把分析脚本打包成Docker镜像
# 2. 定义"作业定义"(Job Definition):要跑什么命令、需要多少资源
# 3. 提交到"作业队列"(Job Queue)
# 4. AWS Batch自动分配"计算环境"(Compute Environment)的EC2实例
# 5. 跑完自动回收资源

# 示例:定义一个比对作业
# job_definition.json:
# {
#   "jobDefinitionName": "bwa-alignment",
#   "type": "container",
#   "containerProperties": {
#     "image": "biocontainers/bwa:v0.7.17",  # Docker镜像
#     "vcpus": 8,                              # 需要8个CPU
#     "memory": 32000,                         # 需要32GB内存
#     "command": ["bwa", "mem", "-t", "8",
#                 "ref.fa", "sample.fastq.gz"]
#   }
# }

Lambda — 无服务器函数

白话说:写一小段代码,有事件触发时自动运行——不用管服务器。比如"S3里一有新的FASTQ文件上传,就自动触发质控"。

SageMaker — 机器学习平台

白话说:一站式机器学习环境,内置Jupyter Notebook + GPU + 常见ML框架。适合跑深度学习(如scVI)或训练随机森林模型。


阿里云生信相关服务

阿里云是国内最大的云厂商,对国内用户来说网络更快、支付更方便、合规更简单。

核心服务对照

AWS服务阿里云对应白话说明
EC2ECS(弹性计算服务)云服务器
S3OSS(对象存储服务)云上网盘
AWS Batch已停止维护;替代方案:ACK+弹性容器批量计算
SageMakerPAI(机器学习平台)AI训练平台
Lambda函数计算FC无服务器函数

注意:阿里云批量计算(BatchCompute)已停止维护(2024年官方公告)。目前推荐使用 ACK(容器服务Kubernetes)+ 弹性容器实例(ECI)来替代批量计算任务。

# ===== 阿里云OSS基本操作(用ossutil) =====

# 安装ossutil
# 从 https://help.aliyun.com/document_detail/120075.html 下载

# 配置
ossutil config -e oss-cn-beijing.aliyuncs.com -i <AccessKeyID> -k <AccessKeySecret>

# 创建Bucket
ossutil mb oss://my-bioinfo-data

# 上传文件
ossutil cp sample1.fastq.gz oss://my-bioinfo-data/raw/

# 上传目录
ossutil cp -r ./results/ oss://my-bioinfo-data/results/

# 下载
ossutil cp oss://my-bioinfo-data/results/output.txt ./

# OSS费用(华北2,2025年参考价):
# 标准存储:约¥0.12/GB/月
# 低频访问:约¥0.08/GB/月
# 归档存储:约¥0.033/GB/月
# ===== 阿里云ECS实例类型(生信用) =====

# ecs.t6-c1m2.xlarge — 4核 8G    — 轻量测试
# ecs.g7.2xlarge     — 8核 32G   — 日常分析
# ecs.g7.8xlarge     — 32核 128G — 中等规模
# ecs.r7.8xlarge     — 32核 256G — 内存密集型(组装)
# ecs.c7.8xlarge     — 32核 64G  — CPU密集型(比对)
# ecs.gn6v-c8g1.2xlarge — 8核+V100 — 深度学习

# 命名规则:
# g = 通用型
# c = 计算优化型
# r = 内存优化型
# gn = GPU计算型
# 数字7 = 第7代

云上生信实操(以AWS为例)

完整流程:启动EC2 → 装环境 → 上传数据 → 跑分析 → 下载结果

# ===== 第1步:启动EC2实例 =====

# 方法1:AWS控制台(网页操作)
# 1. 登录 https://console.aws.amazon.com
# 2. 搜索 EC2 → Launch Instance
# 3. 选择 AMI:Ubuntu 22.04 LTS
# 4. 实例类型:m5.4xlarge(16核64G,适合宏基因组分析)
# 5. 密钥对:创建或选择已有密钥(.pem文件)
# 6. 安全组:开放SSH(22端口)
# 7. 存储:100GB gp3 SSD
# 8. 点击 Launch

# 方法2:AWS CLI(命令行)
aws ec2 run-instances \
  --image-id ami-0c55b159cbfafe1f0 \
  --instance-type m5.4xlarge \
  --key-name my-key \
  --security-group-ids sg-xxxxxx \
  --block-device-mappings '[{"DeviceName":"/dev/sda1","Ebs":{"VolumeSize":100,"VolumeType":"gp3"}}]'

# ===== 第2步:SSH连接 =====
ssh -i my-key.pem ubuntu@<EC2的公网IP>
# -i 指定密钥文件
# ubuntu@ 是Ubuntu AMI的默认用户名

# ===== 第3步:安装生信环境 =====
# 安装Miniconda
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh -b  # -b = 静默安装
source ~/.bashrc

# 创建生信环境
conda create -n bioinfo python=3.10 -y  # 创建环境
conda activate bioinfo                    # 激活环境

# 安装生信工具
conda install -c bioconda -c conda-forge \
  fastp=1.3.3 \
  bwa=0.7.17 \
  samtools=1.19 \
  megahit=1.2.9 \
  metaphlan=4.1.0 -y
# -c bioconda = 从bioconda频道安装
# -y = 自动确认

# ===== 第4步:从S3下载数据 =====
# 配置AWS CLI(在EC2上如果用IAM Role则无需配置)
aws configure  # 输入你的Access Key

# 下载原始FASTQ文件
aws s3 sync s3://my-bioinfo-data/raw/ ./raw_data/
# sync会自动跳过已下载的文件

# ===== 第5步:运行分析 =====
# 例子:宏基因组质控+比对
for sample in raw_data/*_R1.fastq.gz; do
    base=$(basename $sample _R1.fastq.gz)  # 提取样本名

    # 质控
    fastp \
      -i raw_data/${base}_R1.fastq.gz \
      -I raw_data/${base}_R2.fastq.gz \
      -o clean/${base}_R1.fastq.gz \
      -O clean/${base}_R2.fastq.gz \
      -h reports/${base}_fastp.html \
      -w 8  # 8个线程

    echo "完成样本: $base"
done

# ===== 第6步:上传结果到S3 =====
aws s3 sync ./results/ s3://my-bioinfo-data/results/
aws s3 sync ./reports/ s3://my-bioinfo-data/reports/

# ===== 第7步:停止/终止实例(省钱!) =====
# 停止(保留数据盘,停止后不收EC2费用,但EBS仍收费)
aws ec2 stop-instances --instance-ids i-xxxxxx

# 终止(彻底删除,不再产生任何费用)
aws ec2 terminate-instances --instance-ids i-xxxxxx

成本控制(省钱秘籍)

1. Spot实例 / 抢占式实例(省60-90%)

白话说:AWS把暂时用不着的服务器"打折出租",可能随时被回收——但对于可以重跑的生信分析来说,性价比极高。

# ===== AWS Spot实例 =====

# 普通(按需)价格 vs Spot价格对比
# m5.4xlarge: 按需$0.768/h vs Spot约$0.23/h(省70%)
# r5.8xlarge: 按需$2.016/h vs Spot约$0.60/h(省70%)

# 用AWS CLI启动Spot实例
aws ec2 run-instances \
  --instance-type m5.4xlarge \
  --image-id ami-0c55b159cbfafe1f0 \
  --instance-market-options '{"MarketType":"spot","SpotOptions":{"SpotInstanceType":"one-time"}}' \
  --key-name my-key
# SpotInstanceType=one-time 表示一次性请求

# 阿里云对应的叫"抢占式实例"
# 原理相同:打折用闲置资源,可能被回收

Spot使用建议: | 场景 | 是否适合Spot | 理由 | |------|------------|------| | 比对/质控(可重跑) | 适合 | 中断了重新跑就行 | | 组装(跑几天的任务) | 看情况 | 设置checkpoint,中断后从断点恢复 | | 数据库服务 | 不适合 | 不能中断 | | Nextflow流程 | 很适合 | Nextflow自动处理失败重试 |

2. 按需 vs 预留实例

类型折扣适合场景
按需(On-Demand)无折扣临时使用、不确定用多久
预留(Reserved)省30-60%确定要用1-3年
Savings Plans省最多72%承诺每小时最低消费
Spot省60-90%可中断的批量任务

3. 自动关机脚本

# ===== 防止忘记关机的自动关机脚本 =====

# 方法1:crontab定时关机(每天凌晨2点自动停止)
echo "0 2 * * * /usr/sbin/shutdown -h now" | crontab -
# 0 2 * * * = 每天凌晨2点
# shutdown -h now = 立即关机

# 方法2:空闲检测关机(CPU使用率低于5%超过30分钟就关机)
cat << 'EOF' > /home/ubuntu/auto_shutdown.sh
#!/bin/bash
# 检查CPU使用率,空闲超过30分钟自动关机
THRESHOLD=5    # CPU使用率阈值(%)
INTERVAL=300   # 检查间隔(秒)
COUNT=0        # 连续低于阈值的次数
MAX_COUNT=6    # 连续6次(30分钟)就关机

while true; do
    CPU=$(top -bn1 | grep "Cpu(s)" | awk '{print 100-$8}')
    # top获取CPU使用率,100减去空闲率=使用率
    if (( $(echo "$CPU < $THRESHOLD" | bc -l) )); then
        COUNT=$((COUNT + 1))
        echo "CPU低于${THRESHOLD}%,连续${COUNT}次"
        if [ $COUNT -ge $MAX_COUNT ]; then
            echo "空闲超过30分钟,正在关机..."
            sudo shutdown -h now
        fi
    else
        COUNT=0  # 重置计数
    fi
    sleep $INTERVAL
done
EOF
chmod +x /home/ubuntu/auto_shutdown.sh
nohup /home/ubuntu/auto_shutdown.sh &

4. 存储层级优化

数据生命周期 → 选对存储层级省钱

正在分析的数据 → 标准存储(S3 Standard / OSS标准)
                 最贵但读写快

分析完30天内可能还要看的 → 低频访问(S3 IA / OSS低频)
                            便宜40%,读取要收少量费用

分析完不太会再看的 → 归档(S3 Glacier / OSS归档)
                     便宜80%,取回要等几小时

永远不会看但法规要求保留的 → 深度归档(Glacier Deep Archive)
                              最便宜,取回要等12小时

# 自动化:设置S3生命周期规则
# 30天后自动转低频 → 90天后自动转归档
aws s3api put-bucket-lifecycle-configuration \
  --bucket my-bioinfo-data \
  --lifecycle-configuration '{
    "Rules": [{
      "ID": "auto-archive",
      "Status": "Enabled",
      "Transitions": [
        {"Days": 30, "StorageClass": "STANDARD_IA"},
        {"Days": 90, "StorageClass": "GLACIER"}
      ],
      "Filter": {"Prefix": "raw/"}
    }]
  }'

Nextflow + AWS Batch 配置

Nextflow是生信流程管理器,和AWS Batch结合可以自动在云上并行运行流程,是目前云上生信分析的主流方案。nf-core社区提供了大量现成的流程。

// ===== nextflow.config — AWS Batch配置 =====

profiles {
    awsbatch {
        process {
            executor = 'awsbatch'       // 使用AWS Batch作为执行器
            queue = 'my-batch-queue'     // AWS Batch的作业队列名
            container = 'nfcore/rnaseq:3.14.0' // 默认Docker镜像
        }

        aws {
            region = 'us-east-1'        // AWS区域
            batch {
                cliPath = '/home/ec2-user/miniconda/bin/aws'
                // AWS CLI的路径
            }
        }

        // 工作目录必须是S3路径
        workDir = 's3://my-nf-work/work/'

        // 不同进程可以用不同配置
        process {
            withName: 'FASTQC' {
                cpus = 2                // FastQC只需要2核
                memory = '4.GB'
            }
            withName: 'STAR_ALIGN' {
                cpus = 16               // STAR比对需要16核
                memory = '64.GB'
                container = 'nfcore/star:2.7.10a'
            }
        }
    }
}
# ===== 运行nf-core流程在AWS Batch上 =====

# 先安装Nextflow
curl -s https://get.nextflow.io | bash

# 运行nf-core/rnaseq流程
nextflow run nf-core/rnaseq \
  -profile awsbatch \
  --input samplesheet.csv \
  --outdir s3://my-bioinfo-data/rnaseq-results/ \
  --genome GRCh38 \
  -resume
# -profile awsbatch = 使用上面定义的AWS Batch配置
# --outdir = 输出到S3
# -resume = 如果中断了可以从断点恢复

# Nextflow + AWS Batch的优势:
# 1. 每个步骤自动开独立的EC2实例
# 2. 步骤完成后自动关机(不浪费钱)
# 3. 支持Spot实例(省钱)
# 4. -resume可以从失败点恢复(Spot被回收也不怕)
# 5. 所有中间文件自动存S3

面试怎么答(5道)

Q1:你用过云计算做生信分析吗?怎么用的?

:"用过AWS。流程是:(1) 用EC2启动一台合适配置的服务器(比如宏基因组组装需要大内存就选r5实例);(2) SSH连接后用conda安装分析工具;(3) 从S3下载原始数据到EC2本地;(4) 运行分析流程;(5) 结果上传回S3保存;(6) 分析完立即停止实例。为了省钱,批量任务用Spot实例,并设置自动关机脚本防止忘记关机。"

Q2:云上生信分析怎么省钱?

:"四个核心策略:(1) 用Spot/抢占式实例,比按需价格省60-90%,适合可重跑的分析任务;(2) 选对实例类型——CPU密集型任务用c系列,内存密集型用r系列,别用过大的实例浪费;(3) 存储层级管理——正在用的数据放标准存储,分析完的转低频或归档,设置自动生命周期规则;(4) 用完就关机,设置自动关机脚本防止空跑。我们之前100个样本的分析,用Spot实例只花了按需价格的三分之一。"

Q3:本地分析和云上分析分别适合什么场景?

:"本地适合日常小规模分析(几个样本的差异分析、画图等),成本可控且数据不离本地。云上适合三种场景:(1) 大规模批量计算(比如几百个全基因组同时比对);(2) 突发性计算需求(项目deadline前需要短时间跑完大量分析);(3) 实验室没有足够计算资源。最优方案是混合使用——日常分析在本地,大批量任务上云。"

Q4:你知道Nextflow和AWS Batch怎么配合吗?

:"Nextflow是流程管理器,AWS Batch是计算资源调度器,两者配合非常好。在nextflow.config里设置executor为awsbatch,指定作业队列和S3工作目录。运行时Nextflow会自动把每个步骤提交到AWS Batch,Batch自动分配EC2实例、拉取Docker镜像、运行命令、完成后回收资源。优势是支持Spot实例和-resume断点恢复——即使Spot实例被回收,Nextflow也会自动把该步骤重新提交。nf-core社区有大量现成流程可以直接用。"

Q5:云上分析的数据安全怎么保障?

:"几个关键措施:(1) IAM权限最小化——每个用户/服务只给需要的最小权限;(2) S3桶设为私有,不开公共访问;(3) 传输加密——用HTTPS/TLS;(4) 存储加密——S3开启SSE-S3或SSE-KMS服务端加密;(5) VPC隔离——EC2放在私有子网,只通过堡垒机访问;(6) 日志审计——开CloudTrail记录所有API操作。如果涉及敏感数据(如医疗数据),还要考虑合规要求(如HIPAA)。"


速查表

AWS服务速查

服务用途生信场景费用量级
EC2云服务器运行分析$0.04-$3/小时(按实例类型)
S3对象存储存FASTQ/BAM/结果$0.023/GB/月(标准)
AWS Batch批量计算自动调度大批量任务只收EC2费用
Lambda无服务器函数自动触发流程按调用次数,极便宜
SageMaker机器学习训练模型$0.05-$25/小时
ECR容器镜像仓库存Docker镜像$0.10/GB/月

阿里云服务速查

服务用途费用量级
ECS云服务器¥0.1-¥20/小时
OSS对象存储¥0.12/GB/月(标准)
PAI机器学习¥0.5-¥30/小时
ACK容器服务管理免费,收ECS费
函数计算FC无服务器按调用次数

常用AWS CLI命令

# EC2操作
aws ec2 describe-instances       # 查看所有实例
aws ec2 start-instances --instance-ids i-xxx  # 启动
aws ec2 stop-instances --instance-ids i-xxx   # 停止
aws ec2 terminate-instances --instance-ids i-xxx  # 终止

# S3操作
aws s3 ls                        # 列出所有桶
aws s3 ls s3://bucket/path/      # 列出桶内文件
aws s3 cp local s3://bucket/     # 上传
aws s3 cp s3://bucket/file ./    # 下载
aws s3 sync ./dir s3://bucket/dir/ # 同步目录
aws s3 rm s3://bucket/file       # 删除

# 查看费用
aws ce get-cost-and-usage \
  --time-period Start=2025-01-01,End=2025-01-31 \
  --granularity MONTHLY \
  --metrics "BlendedCost"

延伸资源

  1. AWS官方基因组学方案:https://aws.amazon.com/health/genomics/
  2. nf-core AWS教程:https://nf-co.re/docs/usage/tutorials/nextflow_on_aws_batch
  3. 阿里云生命科学方案:https://www.aliyun.com/solution/lifescience
  4. Nextflow官方文档:https://www.nextflow.io/docs/latest/index.html
  5. AWS定价计算器:https://calculator.aws/
  6. 阿里云价格计算器:https://www.aliyun.com/price/product
  7. AWS CLI文档:https://docs.aws.amazon.com/cli/latest/reference/

如果你只是找实习/初级岗位,面试官不会要求你精通云计算。但能说出"我了解EC2/S3/Batch的基本概念,用过AWS CLI上传下载数据,知道Spot实例省钱",已经比大多数候选人强了。