在AWS Lambda上5分钟搞定DeepSeek安装,无坑指南

云信安装大师
90
AI 质量分
11 5 月, 2025
2 分钟阅读
0 阅读

在AWS Lambda上5分钟搞定DeepSeek安装,无坑指南

引言

DeepSeek是一款强大的开源AI模型,很多开发者希望将其部署到无服务器环境中运行。AWS Lambda作为流行的Serverless计算服务,是部署DeepSeek的理想选择之一。本文将带你5分钟内在Lambda上完成DeepSeek的安装和配置,避免常见的坑点。

准备工作

在开始之前,你需要:
1. 一个AWS账号(免费层即可)
2. AWS CLI已配置好凭证
3. 了解基本的Lambda概念

💡 注意:由于DeepSeek模型较大(约5GB),需要使用Lambda的容器镜像功能而非直接上传ZIP包

步骤1:创建Docker镜像

首先我们需要创建一个包含DeepSeek的Docker镜像:

代码片段
# Dockerfile
FROM public.ecr.aws/lambda/python:3.9

# 安装系统依赖
RUN yum install -y gcc-c++ make && \
    yum clean all && \
    rm -rf /var/cache/yum

# 安装Python依赖
COPY requirements.txt .
RUN pip install -r requirements.txt --target "${LAMBDA_TASK_ROOT}"

# 复制应用代码
COPY app.py ${LAMBDA_TASK_ROOT}

# 设置入口点
CMD ["app.handler"]

requirements.txt内容:

代码片段
transformers==4.36.0
torch==2.0.1
sentencepiece==0.1.99
accelerate==0.24.1

app.py处理函数:

代码片段
from transformers import AutoModelForCausalLM, AutoTokenizer

model = None
tokenizer = None

def handler(event, context):
    global model, tokenizer

    # 延迟加载模型(冷启动时加载)
    if model is None:
        model_id = "deepseek-ai/deepseek-llm-7b"
        tokenizer = AutoTokenizer.from_pretrained(model_id)
        model = AutoModelForCausalLM.from_pretrained(model_id)

    # 处理输入
    input_text = event.get('input', '')
    inputs = tokenizer(input_text, return_tensors="pt")

    # 生成响应
    outputs = model.generate(**inputs, max_new_tokens=50)
    result = tokenizer.decode(outputs[0], skip_special_tokens=True)

    return {
        'statusCode': 200,
        'body': result
    }

构建并推送镜像到ECR:

代码片段
# 创建ECR仓库(如果不存在)
aws ecr create-repository --repository-name deepseek-lambda --region us-east-1

# 登录ECR
aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin YOUR_ACCOUNT_ID.dkr.ecr.us-east-1.amazonaws.com

# 构建镜像(注意替换YOUR_ACCOUNT_ID)
docker build -t deepseek-lambda .
docker tag deepseek-lambda:latest YOUR_ACCOUNT_ID.dkr.ecr.us-east-1.amazonaws.com/deepseek-lambda:latest
docker push YOUR_ACCOUNT_ID.dkr.ecr.us-east-1.amazonaws.com/deepseek-lambda:latest

步骤2:创建Lambda函数

通过AWS控制台或CLI创建Lambda函数:

代码片段
aws lambda create-function \
    --function-name deepseek-demo \
    --package-type Image \
    --code ImageUri=YOUR_ACCOUNT_ID.dkr.ecr.us-east-1.amazonaws.com/deepseek-lambda:latest \
    --role arn:aws:iam::YOUR_ACCOUNT_ID:role/lambda-execution-role \
    --timeout 900 \ 
    --memory-size 10240 \
    --region us-east-1

关键参数说明:
--timeout 900:设置为15分钟最大超时(模型加载需要时间)
--memory-size 10240:分配10GB内存(建议至少10GB)

⚠️ 重要:确保执行角色有足够权限(至少包含AWSLambdaBasicExecutionRole)

步骤3:测试Lambda函数

创建测试事件:

代码片段
{
  "input": "请解释一下量子计算的基本原理"
}

通过CLI测试:

代码片段
aws lambda invoke \
    --function-name deepseek-demo \
    --payload '{"input":"请解释一下量子计算的基本原理"}' \ 
    output.json && cat output.json

常见问题解决

Q1: 冷启动时间过长?

解决方案:
预热:定期调用保持实例活跃(如每5分钟一次)
精简模型:使用量化版本或小尺寸模型

Q2: Memory Limit Exceeded错误?

解决方案:
增加内存:逐步增加直到稳定(最大10GB)
优化代码:移除不必要的依赖和变量

Q3: Timeout错误?

解决方案:
增加超时时间:最大可设置15分钟
分步处理:将大任务拆分为多个小任务

性能优化建议

  1. 使用Provisioned Concurrency:预置并发实例减少冷启动延迟

    代码片段
    aws lambda put-provisioned-concurrency-config \ 
        --function-name deepseek-demo \ 
        --qualifier \$LATEST \ 
        --provisioned-concurrent-executions 1 
    
  2. 启用ARM架构:Graviton处理器性价比更高

    代码片段
    FROM public.ecr.aws/lambda/python:3.9-arm64 
    
  3. 模型缓存优化:将模型存储在/tmp目录下减少重复下载

    代码片段
    cache_dir = "/tmp/models"
    model = AutoModelForCausalLM.from_pretrained(model_id, cache_dir=cache_dir)
    

总结

通过本文你学会了:
✅ Docker容器方式部署大模型到Lambda
✅ DeepSeek模型的快速集成方法
✅ Lambda关键参数配置技巧
✅常见问题的解决方案

现在你的DeepSeek已经在AWS Lambda上运行起来了!下一步可以尝试集成API Gateway提供HTTP接口,或者结合Step Functions构建更复杂的AI工作流。

原创 高质量