# 局域网AI算力共享系统

## 📋 概述

本系统实现了局域网内多台电脑之间的GPU资源共享和AI模型推理任务的分布式执行。通过自动发现、智能调度和安全传输机制，将局域网内所有可用的GPU资源整 合成一个统一的算力池，实现高效的分布式计算。

## 🏗️ 架构设计

### 系统架构图

```
┌─────────────────────────────────────────────────────────────────────────┐
│                        局域网集群架构                                  │
├─────────────────────────────────────────────────────────────────────────┤
│                                                                       │
│   ┌─────────────┐    ┌─────────────┐    ┌─────────────┐              │
│   │   Node A    │    │   Node B    │    │   Node C    │   ...        │
│   │ (Leader)   │    │ (Worker)   │    │ (Worker)   │              │
│   └─────┬─────┘    └─────┬─────┘    └─────┬─────┘              │
│         │                │                │                          │
│         ↓                ↓                ↓                          │
│   ┌──────────────────────────────────────────────────────┐            │
│   │              LAN Network (UDP/TCP)                   │            │
│   │  Port 15300: 节点发现    Port 15301: 主通信          │            │
│   │  Port 15302: 任务分发    Port 15303: 数据传输          │            │
│   │  Port 15304: 状态监控    Port 15305: REST API         │            │
│   └──────────────────────────────────────────────────────┘            │
│                                                                       │
└─────────────────────────────────────────────────────────────────────────┘
```

### 核心组件

| 组件           | 文件                         | 职责                |
| ------------ | -------------------------- | ----------------- |
| **GPU检测**    | `gpu_detector.py`          | 检测GPU型号、显存、温度等信息  |
| **节点通信**     | `lan_node.py`              | 局域网节点发现、连接管理、心跳监控 |
| **任务调度**     | `task_scheduler.py`        | 任务分发与负载均衡         |
| **安全传输**     | `secure_transport.py`      | 数据加密与签名验证         |
| **集群监控**     | `cluster_monitor.py`       | 实时状态监控与统计         |
| **分布式推理**    | `distributed_inference.py` | AI模型分布式推理         |
| **REST API** | `cluster_api.py`           | 对外API接口           |
| **集群管理**     | `__init__.py`              | 整合所有组件            |

## 🔌 端口分配

| 端口        | 协议   | 用途       |
| --------- | ---- | -------- |
| **15300** | UDP  | 节点发现广播   |
| **15301** | TCP  | 主节点通信    |
| **15302** | TCP  | 任务分发     |
| **15303** | TCP  | 数据传输     |
| **15304** | UDP  | 状态监控     |
| **15305** | HTTP | REST API |

## 🧠 核心原理

### 1. 节点发现机制

**原理**: 使用UDP广播实现局域网内节点自动发现

```
┌─────────────────────────────────────────────────────────────┐
│                    节点发现流程                             │
├─────────────────────────────────────────────────────────────┤
│                                                           │
│   节点启动 → 发送UDP广播(255.255.255.255:15300)           │
│                    ↓                                      │
│   其他节点接收广播 → 解析节点信息 → 添加到节点列表           │
│                    ↓                                      │
│   定时发送心跳包 → 更新节点状态 → 检测离线节点             │
│                                                           │
└─────────────────────────────────────────────────────────────┘
```

**关键技术点**:

- 定时广播间隔: 3秒
- 心跳超时时间: 15秒
- 离线判定: 连续两个心跳周期无响应

### 2. GPU资源检测

**检测方式**:

| 方法         | 说明                       |
| ---------- | ------------------------ |
| nvidia-smi | Windows/Linux系统获取详细GPU信息 |
| PyTorch    | 备用方案，通过torch.cuda检测      |

**检测内容**:

- GPU型号和数量
- 显存总量/已用/可用
- GPU使用率
- 温度
- 计算能力版本

### 3. 负载均衡算法

**节点评分公式**:

```
Score = (显存充足度 × 50) + (GPU数量 × 10) + (负载比率 × 30) + (优先级加成 × 10)
```

**评分因子**:

| 因子    | 权重  | 说明                      |
| ----- | --- | ----------------------- |
| 显存充足度 | 50% | 可用显存 / 总显存              |
| GPU数量 | 10% | 节点GPU数量                 |
| 负载比率  | 30% | (最大任务数 - 当前任务数) / 最大任务数 |
| 优先级加成 | 10% | HIGH/URGENT任务额外加分       |

### 4. 分布式推理流程

```
┌─────────────────────────────────────────────────────────────┐
│                   分布式推理流程                            │
├─────────────────────────────────────────────────────────────┤
│                                                           │
│   用户请求 → 检查本地模型 → 本地可用?                        │
│       ↓                      ↓                            │
│     是                      否                             │
│       ↓                      ↓                            │
│   本地推理            选择最优节点                          │
│       ↓                      ↓                            │
│   返回结果          发送推理请求 → 执行推理 → 返回结果       │
│                                                           │
└─────────────────────────────────────────────────────────────┘
```

### 5. 安全传输机制

**加密方案**:

| 类型    | 算法           | 用途      |
| ----- | ------------ | ------- |
| 对称加密  | Fernet       | 数据传输加密  |
| 非对称加密 | RSA-2048     | 密钥交换    |
| 数字签名  | SHA256 + PSS | 消息完整性验证 |

**安全特性**:

- ✅ 端到端加密
- ✅ 消息签名验证
- ✅ 数据完整性校验
- ✅ 防止重放攻击

## 🚀 快速开始

### 1. 启动集群服务

```python
from src.services.cluster import ClusterManager

# 创建集群管理器
cluster = ClusterManager()

# 启动集群
cluster.start()

print("集群服务已启动")
```

### 2. 集成本地模型

```python
from src.services.local_model_service import LocalModelService

# 创建本地模型服务
local_model = LocalModelService()

# 连接到集群
cluster.set_local_model_service(local_model)

# 加载模型
local_model.load_model("Qwen2-0.5B")
```

### 3. 执行推理

```python
# 同步推理
result = cluster.chat("帮我写一首诗")
print(result)

# 流式推理
for chunk in cluster.chat_stream("讲一个故事"):
    print(chunk, end="", flush=True)
```

### 4. 通过API访问

```bash
# 获取集群状态
curl http://localhost:15305/api/cluster/summary

# 获取节点列表
curl http://localhost:15305/api/cluster/nodes

# 获取任务列表
curl http://localhost:15305/api/cluster/tasks

# 提交任务
curl -X POST http://localhost:15305/api/cluster/task \
  -H "Content-Type: application/json" \
  -d '{"type": "ai_inference", "data": {"prompt": "Hello"}, "priority": 2}'
```

## 📊 API接口

### GET /api/cluster/stats

获取集群统计信息

**响应示例**:

```json
{
  "status": "active",
  "total_nodes": 3,
  "active_nodes": 3,
  "total_gpus": 4,
  "total_memory_gb": 48.0,
  "available_memory_gb": 32.0,
  "active_tasks": 2,
  "completed_tasks": 100,
  "failed_tasks": 2
}
```

### GET /api/cluster/nodes

获取节点列表

### GET /api/cluster/tasks

获取任务列表

### GET /api/cluster/summary

获取集群摘要

### GET /api/cluster/self

获取本节点信息

### POST /api/cluster/task

提交新任务

### POST /api/cluster/task/cancel

取消任务

## ⚙️ 配置说明

### 环境变量

| 变量               | 默认值   | 说明       |
| ---------------- | ----- | -------- |
| CLUSTER\_ENABLED | true  | 是否启用集群功能 |
| DISCOVERY\_PORT  | 15300 | 发现服务端口   |
| MAIN\_PORT       | 15301 | 主通信端口    |
| TASK\_PORT       | 15302 | 任务端口     |
| DATA\_PORT       | 15303 | 数据端口     |
| MONITOR\_PORT    | 15304 | 监控端口     |
| API\_PORT        | 15305 | API端口    |

### 配置示例 (.env)

```ini
# 集群配置
CLUSTER_ENABLED=true
DISCOVERY_PORT=15300
MAIN_PORT=15301
TASK_PORT=15302
DATA_PORT=15303
MONITOR_PORT=15304
API_PORT=15305

# 任务配置
MAX_TASKS_PER_NODE=10
HEARTBEAT_INTERVAL=5
HEARTBEAT_TIMEOUT=15
```

## 🔍 故障排除

### 常见问题

| 问题      | 原因            | 解决方案         |
| ------- | ------------- | ------------ |
| 无法发现节点  | 防火墙阻止UDP广播    | 允许UDP端口15300 |
| 连接被拒绝   | 目标端口未开放       | 检查端口占用情况     |
| GPU检测失败 | nvidia-smi不可用 | 安装NVIDIA驱动   |
| 任务分配失败  | 节点离线          | 检查网络连接       |

### 日志说明

```
[LANNode] 节点 abc12345 已启动，IP: 192.168.1.100
[LANNode] 发现新节点: def67890 (192.168.1.101)
[TaskScheduler] 任务 12345678 已分配到节点 def67890
[DistributedInference] 收到推理请求: abcdef12
[ClusterMonitor] 集群状态: active
```

## 📈 性能优化

### 优化策略

1. **本地优先**: 优先使用本地GPU，减少网络开销
2. **显存感知**: 根据模型大小选择合适的节点
3. **批量任务**: 合并小任务，减少网络往返
4. **异步传输**: 使用异步IO提高并发处理能力

### 性能指标

| 指标     | 说明          | 目标值      |
| ------ | ----------- | -------- |
| 节点发现延迟 | 从启动到发现所有节点  | < 5秒     |
| 任务分配延迟 | 从提交到分配完成    | < 100ms  |
| 推理延迟   | 网络传输 + 计算时间 | 取决于模型    |
| 吞吐量    | 每秒处理任务数     | 取决于GPU数量 |

## 🤝 扩展能力

### 支持的模型类型

- ✅ 大语言模型 (LLM)
- ✅ 图像生成模型
- ✅ 语音识别模型
- ✅ 计算机视觉模型

### 未来扩展

- [ ] 分布式训练支持
- [ ] 模型并行计算
- [ ] 动态负载均衡
- [ ] 容错与故障恢复
- [ ] 资源预留机制

## 📝 许可证

本系统采用 MIT 许可证，详见 LICENSE 文件。

***

*文档版本: 1.0*\
*最后更新: 2026年5月*
