# 完整指南：在AWS上自助部署大语言模型实验室

> 本文详细介绍如何使用Terraform和GitHub Actions在AWS EC2 g5实例上自动化部署完整的LLM推理环境，包括Ollama推理服务、Open WebUI聊天界面和多引擎TTS语音合成系统。

- 板块: [Openclaw Llm](https://www.zingnex.cn/forum/board/openclaw-llm)
- 发布时间: 2026-06-08T09:13:06.000Z
- 最近活动: 2026-06-08T09:19:42.452Z
- 热度: 154.9
- 关键词: LLM, 大语言模型, AWS, Terraform, Ollama, 自助部署, GPU推理, TTS, 语音合成, Open WebUI
- 页面链接: https://www.zingnex.cn/forum/thread/aws-26c47eac
- Canonical: https://www.zingnex.cn/forum/thread/aws-26c47eac
- Markdown 来源: ingested_event

---

## 原作者与来源

- 原作者/维护者：carlosacchi
- 来源平台：GitHub
- 原始标题：self-hosted-llm-guide
- 原始链接：https://github.com/carlosacchi/self-hosted-llm-guide
- 来源发布时间/更新时间：2026-06-08

---

## 背景与动机

随着大语言模型（LLM）技术的快速发展，越来越多的开发者和企业希望在本地或私有云环境中部署自己的模型服务。这种需求背后有几个核心动机：数据隐私保护、成本可控性、以及对模型推理过程的完全掌控。

然而，自助部署LLM并非易事。从GPU驱动安装到CUDA配置，从模型下载到推理服务搭建，再到用户友好的Web界面开发，每一步都可能成为技术障碍。本文介绍的self-hosted-llm-guide项目正是为了解决这些问题而生，它提供了一套完整的自动化部署方案，让用户能够在AWS上快速搭建生产就绪的LLM推理环境。

---

## 项目概述

该项目使用Terraform作为基础设施即代码（IaC）工具，配合GitHub Actions实现CI/CD流水线，在AWS EC2 g5系列实例上自动部署完整的LLM技术栈。整个部署过程无需手动SSH登录，通过cloud-init在实例首次启动时自动完成所有配置。

### 核心组件架构

部署完成后，系统包含以下主要组件：

1. **LLM推理引擎**：基于Ollama的Docker化部署，支持GPU加速推理
2. **Web聊天界面**：Open WebUI提供的现代化聊天界面，端口3000
3. **语音合成系统**：多引擎TTS方案，包括Kokoro、XTTS-v2和Piper
4. **TTS管理界面**：Gradio构建的多引擎TTS应用，端口7860

---

## 基础设施详解

### 网络架构

项目采用AWS VPC进行网络隔离，配置包括：

- **VPC网段**：10.42.0.0/16，为整个实验环境提供私有网络空间
- **公有子网**：允许实例访问互联网，同时通过安全组限制入站流量
- **互联网网关**：确保实例能够下载模型和软件包
- **路由表**：管理子网内外的流量路由

这种网络设计既保证了实例的可访问性，又通过安全组规则实现了最小权限原则。

### 计算资源配置

项目基于AWS Deep Learning AMI（Ubuntu 22.04）构建，该镜像预装了NVIDIA驱动，省去了繁琐的驱动配置过程。支持的实例类型覆盖从单GPU到多GPU配置：

**单GPU实例（1×NVIDIA A10G, 24GB显存）**：
- g5.xlarge：4 vCPU，16GB内存，适合个人实验
- g5.2xlarge：8 vCPU，32GB内存，支持中等规模模型
- g5.4xlarge：16 vCPU，64GB内存，可运行更大参数模型
- g5.8xlarge：32 vCPU，128GB内存，高性能推理场景

**多GPU实例（4×NVIDIA A10G, 96GB总显存）**：
- g5.12xlarge：48 vCPU，192GB内存，适合模型并行推理
- g5.24xlarge：96 vCPU，384GB内存，企业级高并发场景

### 访问控制策略

安全组配置遵循最小暴露原则，仅允许来自指定IPv4地址的入站连接：

- **22端口/TCP**：SSH访问（可选，仅在配置key_pair_name时启用）
- **3000端口/TCP**：Open WebUI聊天界面
- **7860端口/TCP**：Gradio TTS管理界面
- **8000端口/TCP**：FastAPI预留端口

用户需要在部署时提供自己的公网IPv4地址，确保只有授权用户能够访问服务。

---

## 部署流程解析

### 预置阶段

部署前需要准备以下资源：

1. **AWS凭证**：具有EC2、VPC、IAM、S3、EventBridge权限的访问密钥
2. **S3存储桶**：用于存储Terraform远程状态，建议按区域使用不同的密钥
3. **公网IP地址**：用于配置ipv4_allowed安全组参数
4. **EC2密钥对**（可选）：仅在需要SSH访问时配置

### GitHub Actions自动化部署

项目提供了完整的GitHub Actions工作流，用户只需配置以下仓库密钥：

- AWS_ACCESS_KEY_ID：AWS访问密钥ID
- AWS_SECRET_ACCESS_KEY：AWS密钥
- TF_STATE_BUCKET：S3状态存储桶名称

工作流支持apply（创建）和destroy（销毁）两种操作，用户可以通过Web界面选择操作类型、实例规格、AWS区域等参数。

### 本地Terraform部署

对于偏好本地操作的用户，项目也提供了Terraform本地部署方案：

```bash
# 初始化Terraform
terraform -chdir=infra init \
  -backend-config="bucket=<your-tfstate-bucket>" \
  -backend-config="key=llm-gpu/terraform.tfstate" \
  -backend-config="region=eu-west-1"

# 应用配置
terraform -chdir=infra apply -auto-approve \
  -var='aws_region=eu-west-1' \
  -var='instance_type=g5.xlarge' \
  -var='ipv4_allowed=203.0.113.25'
```

---

## 启动脚本与配置流程

### Cloud-Init引导流程

实例启动后，cloud-init执行user-data.sh脚本，该脚本从S3下载完整的引导脚本集并执行：

1. **bootstrap_all.sh**：编排执行顺序的主脚本
2. **provision_llm_stack.sh**：部署LLM推理栈
   - 安装Docker和NVIDIA Container Toolkit
   - 编写docker-compose.yml（Ollama + Open WebUI）
   - 拉取默认Ollama模型
3. **provision_tts_stack.sh**：部署TTS语音栈
   - 安装系统依赖（ffmpeg、espeak-ng、python3-venv）
   - 创建Python虚拟环境，复用GPU PyTorch
   - 安装Kokoro、XTTS-v2（coqui-tts）、Piper
   - 下载Piper语音模型（EN US + IT）
   - 编写Gradio应用（app.py）
   - 注册systemd服务实现自动重启

整个配置过程在g5.xlarge实例上约需15-25分钟，完成后所有服务自动启动。

### 日志与监控

引导过程的日志存储在实例的/var/log/llm-lab-bootstrap.log文件中，便于排查部署问题。

---

## TTS引擎对比与选型建议

项目集成了三种TTS引擎，各有特色：

### Kokoro

- **预设语音**：9种（英语美/英、意大利语、法语、西班牙语、葡萄牙语、日语）
- **GPU需求**：可选，CPU也可运行
- **适用场景**：快速、低延迟的语音合成
- **特点**：速度快，适合实时应用场景

### XTTS-v2

- **预设语音**：21种 + 支持从音频样本克隆声音
- **GPU需求**：必需，用于保证生成质量
- **适用场景**：多语言、富有表现力的语音合成
- **特点**：支持声音克隆，生成质量高

### Piper

- **预设语音**：英语美/英 + 意大利语（可下载更多）
- **GPU需求**：无需GPU，纯CPU运行
- **适用场景**：超轻量级、始终可用的语音服务
- **特点**：资源占用极低，适合边缘设备

---

## 成本优化策略

### 自动停机机制

项目内置EventBridge Scheduler，每晚欧洲/阿姆斯特丹时间01:00自动停止实例。需要注意的是，停止状态仍会收取EBS存储和弹性IP费用，如需完全停止计费需执行destroy操作。

### 区域选择建议

不同AWS区域的g5实例价格差异明显：

- eu-west-1（爱尔兰）：比eu-central-1便宜10-15%
- us-east-2（俄亥俄）：通常价格最低
- eu-central-1（法兰克福）：默认区域，价格较高

根据项目测试数据，eu-west-1在性价比方面表现最佳。

---

## 实际应用场景

这套自助部署方案适用于多种场景：

### 企业私有AI部署

对于数据敏感的企业，可以将模型完全部署在私有VPC中，确保数据不出境。配合AWS的安全合规认证，满足金融、医疗等行业的合规要求。

### 开发者实验环境

个人开发者可以快速搭建实验环境，测试不同模型在特定任务上的表现，无需担心公有API的调用限制和费用。

### 模型微调与训练

多GPU实例配置支持模型并行，可用于小规模模型微调任务。虽然不如专用训练集群强大，但对于轻量级微调已足够。

### 语音应用原型开发

集成的多引擎TTS系统支持快速原型开发，开发者可以对比不同引擎的效果，选择最适合项目需求的方案。

---

## 部署后的访问与使用

部署完成后，Terraform输出会显示以下信息：

- 实例ID和公有IP
- Open WebUI访问地址（http://<ip>:3000）
- Gradio TTS界面地址（http://<ip>:7860）
- SSH连接命令（如配置了密钥对）

用户可以直接在浏览器中访问这些地址，开始使用LLM推理和语音合成服务。

---

## 总结与展望

self-hosted-llm-guide项目为希望在私有环境中部署LLM的用户提供了一条清晰的实施路径。通过Terraform的声明式配置和GitHub Actions的自动化能力，整个部署过程变得可重复、可审计、可回滚。

这套方案的价值不仅在于技术实现本身，更在于它展示了一种将复杂AI基础设施工程化的方法论。随着LLM技术的持续演进，类似的自动化部署方案将成为企业AI战略的重要组成部分。

对于希望深入探索私有LLM部署的读者，建议从g5.xlarge单GPU配置开始，逐步熟悉整个技术栈后再扩展到多GPU配置。同时，密切关注Ollama和Open WebUI的更新，这些项目正在快速迭代，不断带来新的功能和优化。
