【Bug已解决】openclaw: "GPU context lost" / WebGPU device lost — OpenClaw GPU上下文丢失解决方案
1. 问题描述
在使用 OpenClaw 执行需要 GPU 加速的任务(如 AI 推理、大规模数据处理、图形渲染)时,系统报出 GPU 上下文丢失错误:
# GPU上下文丢失 – 标准报错
$ openclaw –gpu "执行AI推理任务"
Error: GPU context lost
WebGPU device lost
Reason: destroyed
Device was lost during execution of compute shader
# GPU显存不足
$ openclaw –gpu "处理大型张量"
Error: Out of Memory
GPU memory allocation failed
Requested: 4096MB, Available: 1024MB
# GPU驱动不兼容
$ openclaw –gpu "运行模型推理"
Error: GPU adapter not available
No compatible GPU adapter found
WebGPU not supported in this environment
# GPU计算超时
$ openclaw –gpu "复杂计算任务"
Error: GPU timeout
Compute shader exceeded 2000ms time limit
GPU reset triggered by watchdog
这个问题在以下场景中特别常见:
- GPU 驱动版本过旧或不兼容
- 显存不足以加载模型或数据
- 多个进程竞争 GPU 资源
- GPU 温度过高导致降频/重置
- WebGPU 在当前环境不被支持
- 长时间计算触发 TDR(超时检测和恢复)

2. 原因分析
OpenClaw启动GPU任务
↓
请求GPU适配器 ←──── WebGPU navigator.gpu.requestAdapter()
↓
创建GPU设备 ←──── adapter.requestDevice()
↓
分配GPU显存 ←──── device.createBuffer()
↓
执行计算着色器 ←──── 可能超时/OOM
↓
GPU重置 → 上下文丢失 → 报错
| 显存不足 | OOM | 约 30% |
| 驱动不兼容 | adapter not found | 约 25% |
| 计算超时 | TDR/watchdog | 约 20% |
| 温度过高 | thermal reset | 约 10% |
| 多进程竞争 | context stolen | 约 8% |
| WebGPU不支持 | 无GPU API | 约 7% |
深层原理
OpenClaw 通过 WebGPU API(或 Node.js 的 gpu/compute 模块)访问 GPU 进行并行计算。WebGPU 的生命周期管理要求开发者在设备丢失(device lost)时正确处理资源清理和任务恢复。GPU 设备丢失可能由多种原因触发:驱动崩溃、显存耗尽、操作系统 TDR 机制(Windows 默认 2 秒超时后重置 GPU)、GPU 过热保护等。当设备丢失事件触发时,所有已创建的 GPU 资源(缓冲区、纹理、管线)变为无效,正在执行的命令被中止,OpenClaw 必须捕获 device.lost Promise 并执行恢复逻辑。
3. 解决方案
方案一:实现 GPU 设备丢失恢复机制(最推荐)
// 创建 GPU 设备管理器,支持自动恢复
// .openclaw/gpu_manager.js
class GPUDeviceManager {
constructor() {
this.device = null;
this.adapter = null;
this.adapterInfo = null;
this.maxRetries = 3;
this.retryCount = 0;
this.resources = new Map(); // 资源注册表
}
async initialize() {
if (!navigator.gpu) {
throw new Error('WebGPU 不支持。请使用支持 WebGPU 的环境。');
}
await this.requestDevice();
}
async requestDevice() {
// 请求适配器
this.adapter = await navigator.gpu.requestAdapter({
powerPreference: 'high-performance',
forceFallbackAdapter: false
});
if (!this.adapter) {
throw new Error('无可用 GPU 适配器');
}
this.adapterInfo = await this.adapter.requestAdapterInfo();
console.log(`GPU 适配器: ${this.adapterInfo.device}`);
// 请求设备,设置合理的限制
this.device = await this.adapter.requestDevice({
requiredLimits: {
maxBufferSize: 1024 * 1024 * 1024, // 1GB
maxStorageBufferBindingSize: 512 * 1024 * 1024, // 512MB
maxComputeWorkgroupsPerDimension: 65535,
maxComputeInvocationsPerWorkgroup: 256,
},
requiredFeatures: ['timestamp-query']
});
// 注册设备丢失处理
this.device.lost.then(async (info) => {
console.warn(`⚠️ GPU 设备丢失: ${info.reason}`);
console.warn(` 消息: ${info.message}`);
await this.handleDeviceLost(info);
});
this.retryCount = 0;
console.log('✅ GPU 设备已就绪');
}
async handleDeviceLost(info) {
if (info.reason === 'destroyed') {
console.log('设备被主动销毁,无需恢复');
return;
}
if (this.retryCount < this.maxRetries) {
this.retryCount++;
console.log(`尝试恢复 GPU 设备 (${this.retryCount}/${this.maxRetries})…`);
// 等待一段时间后重试
await new Promise(r => setTimeout(r, 1000 * this.retryCount));
try {
await this.requestDevice();
await this.restoreResources();
console.log('✅ GPU 设备已恢复');
} catch (err) {
console.error(`恢复失败: ${err.message}`);
await this.handleDeviceLost({ reason: 'error', message: err.message });
}
} else {
console.error('❌ GPU 恢复次数已达上限,回退到 CPU 模式');
await this.fallbackToCPU();
}
}
registerResource(name, createFn) {
this.resources.set(name, createFn);
}
async restoreResources() {
console.log('恢复 GPU 资源…');
for (const [name, createFn] of this.resources) {
try {
await createFn(this.device);
console.log(` ✅ ${name}`);
} catch (err) {
console.error(` ❌ ${name}: ${err.message}`);
}
}
}
async fallbackToCPU() {
console.log('回退到 CPU 计算模式');
// 通知 OpenClaw 切换到 CPU 模式
process.env.OPENCLAW_COMPUTE_MODE = 'cpu';
}
getDevice() {
if (!this.device) {
throw new Error('GPU 设备未初始化');
}
return this.device;
}
}
module.exports = GPUDeviceManager;
方案二:配置 GPU 资源限制
# 检查 GPU 信息
# macOS
system_profiler SPDisplaysDataType | grep -A5 "Chipset"
# Linux (NVIDIA)
nvidia-smi –query-gpu=name,memory.total,memory.used,memory.free –format=csv
# Linux (AMD)
rocm-smi –showproductname –showmeminfo
# 配置 OpenClaw 的 GPU 限制
python3 -c "
import json
with open('.openclaw/config.json', 'r') as f:
config = json.load(f)
config['gpu'] = {
'enabled': True,
'maxMemoryAllocation': 524288000, # 500MB(留余量)
'maxComputeTime': 1500, # 1.5秒(低于TDR 2秒限制)
'enableRecovery': True, # 启用自动恢复
'maxRecoveryRetries': 3, # 最大重试3次
'fallbackToCPU': True, # GPU失败回退CPU
'powerPreference': 'high-performance',
'workgroupSize': [64, 1, 1], # 工作组大小
'batchSize': 1024 # 批处理大小
}
with open('.openclaw/config.json', 'w') as f:
json.dump(config, f, indent=2)
print('GPU 限制已配置: 500MB内存, 1.5秒超时, 自动恢复+CPU回退')
"
# 检查 GPU 显存使用情况
nvidia-smi 2>/dev/null || echo "非NVIDIA GPU或无nvidia-smi"
方案三:分批处理避免显存溢出
# 创建 GPU 显存管理器
class GPUMemoryManager:
"""GPU 显存管理,避免 OOM"""
def __init__(self, max_memory_mb=500):
self.max_memory = max_memory_mb * 1024 * 1024 # 转为字节
self.current_usage = 0
self.allocations = {}
def can_allocate(self, size):
"""检查是否可以分配"""
return self.current_usage + size <= self.max_memory
def allocate(self, name, size):
"""分配显存"""
if not self.can_allocate(size):
# 尝试释放未使用的分配
self.cleanup_unused()
if not self.can_allocate(size):
needed_mb = (self.current_usage + size) / 1024 / 1024
max_mb = self.max_memory / 1024 / 1024
raise MemoryError(
f"GPU显存不足: 需要 {needed_mb:.0f}MB, 限制 {max_mb:.0f}MB"
)
self.allocations[name] = {
'size': size,
'in_use': True,
'timestamp': time.time()
}
self.current_usage += size
return True
def release(self, name):
"""释放显存"""
if name in self.allocations:
self.current_usage -= self.allocations[name]['size']
del self.allocations[name]
def cleanup_unused(self):
"""清理未使用的分配"""
to_remove = [
name for name, info in self.allocations.items()
if not info['in_use']
]
for name in to_remove:
self.release(name)
def get_usage(self):
"""获取当前使用情况"""
return {
'used_mb': self.current_usage / 1024 / 1024,
'max_mb': self.max_memory / 1024 / 1024,
'usage_percent': (self.current_usage / self.max_memory) * 100,
'allocations': len(self.allocations)
}
# 分批处理大型数据
def batch_process_on_gpu(data, batch_size, processor):
"""分批在 GPU 上处理数据"""
results = []
total = len(data)
for i in range(0, total, batch_size):
batch = data[i:i + batch_size]
batch_num = i // batch_size + 1
total_batches = (total + batch_size – 1) // batch_size
print(f" GPU批次 {batch_num}/{total_batches}: {len(batch)} 项")
try:
result = processor(batch)
results.extend(result)
except MemoryError as e:
# 减小批次大小重试
smaller_batch = batch_size // 2
if smaller_batch > 1:
print(f" 显存不足,减小批次到 {smaller_batch}")
return batch_process_on_gpu(
data[i:], smaller_batch, processor
)
raise
# 检查 GPU 状态
# 如果设备丢失,回退到 CPU
if gpu_device_lost():
print(" ⚠️ GPU设备丢失,回退到CPU")
return cpu_fallback(data[i:], processor)
return results
import time
方案四:处理 TDR 超时问题
# Windows: 修改 TDR 超时
# TdrDelay (默认2秒) – GPU操作超时阈值
# 注册表: HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\GraphicsDrivers
# 使用 PowerShell 修改 TDR
# powershell -Command "Set-ItemProperty -Path 'HKLM:\\SYSTEM\\CurrentControlSet\\Control\\GraphicsDrivers' -Name 'TdrDelay' -Value 10 -Type DWord"
# 需要管理员权限
# Linux: 检查 GPU 超时设置
cat /sys/class/drm/card0/device/timeout 2>/dev/null || echo "无超时设置"
# 配置 OpenClaw 使用更短的计算时间
python3 -c "
import json
with open('.openclaw/config.json', 'r') as f:
config = json.load(f)
# 降低单次GPU计算时间,避免触发TDR
config['gpu']['maxComputeTime'] = 1500 # 1.5秒(低于2秒TDR)
config['gpu']['enableCheckpointing'] = True # 启用检查点
config['gpu']['checkpointInterval'] = 1000 # 每秒保存检查点
config['gpu']['autoSplitWorkload'] = True # 自动拆分工作负载
with open('.openclaw/config.json', 'w') as f:
json.dump(config, f, indent=2)
print('GPU TDR防护: 1.5秒超时, 检查点保存, 自动拆分')
"
# 创建检查点机制
cat > .openclaw/gpu_checkpoint.js << 'JEOF'
// GPU 计算检查点
const fs = require('fs');
class GPUCheckpoint {
constructor(checkpointDir = '.openclaw/checkpoints') {
this.checkpointDir = checkpointDir;
this.lastCheckpoint = null;
if (!fs.existsSync(checkpointDir)) {
fs.mkdirSync(checkpointDir, { recursive: true });
}
}
save(state, taskId) {
const checkpoint = {
taskId,
state,
timestamp: Date.now()
};
const path = `${this.checkpointDir}/gpu_${taskId}.json`;
fs.writeFileSync(path, JSON.stringify(checkpoint));
this.lastCheckpoint = checkpoint;
console.log(`检查点已保存: ${path}`);
}
load(taskId) {
const path = `${this.checkpointDir}/gpu_${taskId}.json`;
if (!fs.existsSync(path)) return null;
const data = JSON.parse(fs.readFileSync(path, 'utf-8'));
console.log(`检查点已恢复: ${path}`);
return data;
}
clear(taskId) {
const path = `${this.checkpointDir}/gpu_${taskId}.json`;
if (fs.existsSync(path)) {
fs.unlinkSync(path);
}
}
}
module.exports = GPUCheckpoint;
JEOF
方案五:更新 GPU 驱动
# 检查当前驱动版本
# macOS: GPU 驱动随系统更新
sw_vers # 检查 macOS 版本
# Linux (NVIDIA)
nvidia-smi | grep "Driver Version"
# 或
cat /proc/driver/nvidia/version
# Linux (AMD)
dpkg -l | grep amdgpu # Debian/Ubuntu
rpm -qa | grep amdgpu # RHEL/CentOS
# 更新驱动
# macOS: 软件更新
sudo softwareupdate -ia
# Linux (NVIDIA):
# Ubuntu
sudo apt-get update
sudo apt-get install nvidia-driver-535 # 或最新版本
sudo reboot
# Linux (AMD):
# Ubuntu
sudo apt-get update
sudo apt-get install amdgpu
# 验证 WebGPU 支持
node -e "
const { navigator } = require('node:gpu') ?? {};
if (navigator?.gpu) {
console.log('✅ WebGPU 支持');
navigator.gpu.requestAdapter().then(adapter => {
if (adapter) {
console.log('✅ GPU 适配器可用');
} else {
console.log('❌ 无可用 GPU 适配器');
}
}).catch(e => console.log('❌', e.message));
} else {
console.log('❌ WebGPU 不支持');
console.log(' 需要 Node.js 21+ 或启用 –experimental-webgpu 标志');
}
" 2>/dev/null || echo "需要启用 WebGPU 实验标志"
# 使用实验标志启用 WebGPU
node –experimental-webgpu -e "console.log('WebGPU已启用')"
方案六:CPU 回退机制
# 配置 OpenClaw 的 CPU 回退策略
python3 -c "
import json
with open('.openclaw/config.json', 'r') as f:
config = json.load(f)
config['compute'] = {
'mode': 'auto', # auto | gpu | cpu
'gpuFirst': True, # 优先使用GPU
'cpuFallback': True, # GPU失败回退CPU
'fallbackDelay': 2000, # 回退延迟2秒
'performanceMode': 'balanced', # balanced | quality | speed
'parallelCPUThreads': 4 # CPU回退时使用4线程
}
with open('.openclaw/config.json', 'w') as f:
json.dump(config, f, indent=2)
print('计算模式: 自动(GPU优先, CPU回退)')
"
# 手动指定计算模式
openclaw –compute-mode cpu "任务" # 强制CPU
openclaw –compute-mode gpu "任务" # 强制GPU
openclaw –compute-mode auto "任务" # 自动选择
# 创建性能对比工具
python3 -c "
import time
import json
# 模拟 GPU vs CPU 性能对比
def benchmark_compute(data_size):
results = {}
# CPU 计算
start = time.time()
cpu_result = [i * 2 for i in range(data_size)]
results['cpu_time'] = time.time() – start
# GPU 计算(如果可用)
try:
# gpu_result = gpu_compute(data_size)
# results['gpu_time'] = …
results['gpu_available'] = True
except Exception:
results['gpu_available'] = False
results['data_size'] = data_size
return results
for size in [1000, 10000, 100000, 1000000]:
result = benchmark_compute(size)
print(f'数据量 {size}: CPU {result[\\"cpu_time\\"]:.3f}s, GPU {\\"可用\\" if result[\\"gpu_available\\"] else \\"不可用\\"}')
"
4. 各方案对比总结
| 方案一:恢复机制 | 长期稳定 | ⭐⭐⭐⭐⭐ |
| 方案二:资源限制 | 预防OOM | ⭐⭐⭐⭐⭐ |
| 方案三:分批处理 | 大数据 | ⭐⭐⭐⭐ |
| 方案四:TDR防护 | 超时问题 | ⭐⭐⭐⭐ |
| 方案五:更新驱动 | 驱动问题 | ⭐⭐⭐⭐ |
| 方案六:CPU回退 | 降级方案 | ⭐⭐⭐⭐ |
5. 常见问题 FAQ
5.1 macOS 上 WebGPU 支持情况
macOS 的 WebGPU 支持取决于 Node.js 版本和系统:
# 检查 Node.js 版本
node –version # 需要 v21+
# 使用实验标志
node –experimental-webgpu -e "
async function test() {
const adapter = await navigator.gpu.requestAdapter();
if (adapter) {
const info = await adapter.requestAdapterInfo();
console.log('GPU:', info.device);
const device = await adapter.requestDevice();
console.log('设备创建成功');
device.destroy();
} else {
console.log('无GPU适配器');
}
}
test();
"
# macOS 上 Metal 后端
# WebGPU 在 macOS 上使用 Metal API
# 需要 macOS 12+ (Monterey)
# 如果 WebGPU 不可用,使用 CPU 模式
export OPENCLAW_COMPUTE_MODE=cpu
openclaw "任务"
5.2 Docker 中无法访问 GPU
容器默认不共享宿主机 GPU:
# NVIDIA GPU 传递给容器
# 需要安装 nvidia-container-toolkit
docker run –gpus all openclaw –gpu "任务"
# Docker Compose
services:
openclaw:
deploy:
resources:
reservations:
devices:
– driver: nvidia
count: 1
capabilities: [gpu]
# 验证容器内 GPU 可见
docker run –gpus all nvidia/cuda:12.0-base nvidia-smi
# 如果无 GPU,自动回退到 CPU
docker run -e OPENCLAW_COMPUTE_MODE=auto openclaw "任务"
5.3 CI/CD 环境无 GPU
CI 环境通常没有 GPU:
# 在 CI 中强制使用 CPU
env:
OPENCLAW_COMPUTE_MODE: cpu
steps:
– name: Run on CPU
run: openclaw –compute-mode cpu "分析项目"
# 或者在有 GPU 的自托管 runner 上运行
self-hosted-gpu-runner:
runs-on: [self-hosted, gpu]
steps:
– name: Run on GPU
run: openclaw –compute-mode gpu "AI推理"
5.4 多个进程竞争 GPU 导致崩溃
多进程同时使用 GPU 可能导致显存不足:
# 检查 GPU 进程
nvidia-smi # 查看 GPU 上运行的进程
# 限制 OpenClaw 使用的 GPU 显存比例
python3 -c "
import json
with open('.openclaw/config.json', 'r') as f:
config = json.load(f)
config['gpu']['memoryFraction'] = 0.3 # 只使用30%的GPU显存
config['gpu']['exclusiveMode'] = False # 非独占模式
config['gpu']['waitForIdle'] = True # 等待GPU空闲
config['gpu']['idleTimeout'] = 5000 # 等待5秒
with open('.openclaw/config.json', 'w') as f:
json.dump(config, f, indent=2)
print('GPU显存限制: 30%, 非独占, 等待空闲')
"
# 使用 GPU 锁避免竞争
python3 -c "
import json
with open('.openclaw/config.json', 'r') as f:
config = json.load(f)
config['gpu']['useLock'] = True
config['gpu']['lockFile'] = '/tmp/openclaw_gpu.lock'
config['gpu']['lockTimeout'] = 30000 # 30秒
with open('.openclaw/config.json', 'w') as f:
json.dump(config, f, indent=2)
print('GPU锁已启用: 文件锁, 30秒超时')
"
5.5 GPU 温度过高导致重置
GPU 过热保护会触发重置:
# 监控 GPU 温度
# NVIDIA
nvidia-smi -q -d TEMPERATURE
# 设置温度阈值
python3 -c "
import json
with open('.openclaw/config.json', 'r') as f:
config = json.load(f)
config['gpu']['maxTemperature'] = 85 # 85°C上限
config['gpu']['throttleAt'] = 80 # 80°C开始降频
config['gpu']['pauseAt'] = 82 # 82°C暂停计算
config['gpu']['cooldownPeriod'] = 10000 # 冷却10秒
config['gpu']['monitorInterval'] = 2000 # 每2秒监控
with open('.openclaw/config.json', 'w') as f:
json.dump(config, f, indent=2)
print('GPU温度监控: 85°C上限, 80°C降频, 82°C暂停')
"
# 创建温度监控脚本
watch -n 2 'nvidia-smi –query-gpu=temperature.gpu,utilization.gpu,memory.used –format=csv,noheader 2>/dev/null'
5.6 虚拟机中 GPU 不可用
虚拟机通常没有 GPU 直通:
# 检查虚拟机是否有 GPU
lspci | grep -i vga
ls /dev/dri/ 2>/dev/null
# 如果无 GPU,强制 CPU 模式
export OPENCLAW_COMPUTE_MODE=cpu
# 如果有 GPU 直通 (PCI passthrough)
# 确保驱动正确安装
lsmod | grep nvidia # NVIDIA
lsmod | grep amdgpu # AMD
# 配置 OpenClaw 自动检测
python3 -c "
import json
with open('.openclaw/config.json', 'r') as f:
config = json.load(f)
config['compute']['mode'] = 'auto'
config['compute']['gpuCheckOnStart'] = True
config['compute']['silentFallback'] = True # 静默回退
with open('.openclaw/config.json', 'w') as f:
json.dump(config, f, indent=2)
print('计算模式: 自动检测, 静默回退')
"
5.7 GPU 计算结果不一致
GPU 和 CPU 计算可能有浮点精度差异:
# 配置 GPU 计算精度
python3 -c "
import json
with open('.openclaw/config.json', 'r') as f:
config = json.load(f)
config['gpu']['precision'] = 'high' # high | medium | low
config['gpu']['enableFP16'] = False # 禁用半精度
config['gpu']['deterministic'] = True # 确定性模式
config['gpu']['workgroupSize'] = [32, 1, 1] # 固定工作组大小
with open('.openclaw/config.json', 'w') as f:
json.dump(config, f, indent=2)
print('GPU精度: high, 确定性模式, 32线程组')
"
# 对比 GPU 和 CPU 结果
# 使用容差比较而非精确相等
def compare_results(gpu_result, cpu_result, tolerance=1e-5):
if len(gpu_result) != len(cpu_result):
return False, "长度不匹配"
max_diff = 0
for g, c in zip(gpu_result, cpu_result):
diff = abs(g – c)
max_diff = max(max_diff, diff)
if max_diff > tolerance:
return False, f"最大差异 {max_diff} 超过容差 {tolerance}"
return True, f"最大差异 {max_diff} 在容差范围内"
5.8 远程 GPU 服务器连接失败
通过远程连接使用 GPU 服务器:
# SSH 连接远程 GPU 服务器
ssh user@gpu-server "openclaw –gpu 'AI推理任务'"
# 确保远程环境变量正确
ssh user@gpu-server "export PATH=/usr/local/cuda/bin:\\$PATH && openclaw –gpu '任务'"
# 使用 Jupyter/远程开发
# 在远程 GPU 服务器上运行 OpenClaw 服务
ssh user@gpu-server "openclaw –serve –port 8080"
# 本地连接
openclaw –remote http://gpu-server:8080 "任务"
# 配置远程 GPU 连接
python3 -c "
import json
with open('.openclaw/config.json', 'r') as f:
config = json.load(f)
config['remote'] = {
'enabled': True,
'host': 'gpu-server.company.com',
'port': 8080,
'useTLS': True,
'timeout': 30000
}
with open('.openclaw/config.json', 'w') as f:
json.dump(config, f, indent=2)
print('远程GPU服务器已配置')
"
排查清单速查表
□ 1. 检查 GPU 是否可用: nvidia-smi 或 system_profiler
□ 2. 验证 WebGPU 支持: node –experimental-webgpu
□ 3. 检查 GPU 驱动版本并更新
□ 4. 配置 maxMemoryAllocation 避免显存溢出
□ 5. 实现 device.lost 处理和自动恢复
□ 6. 设置 maxComputeTime 低于 TDR 限制(1.5秒)
□ 7. 启用检查点保存和自动拆分工作负载
□ 8. 配置 CPU 回退机制
□ 9. 监控 GPU 温度和使用率
□ 10. Docker 中使用 –gpus all 传递 GPU
6. 总结
故障排查流程图
flowchart TD
A[GPU上下文丢失] –> B[检查GPU可用性]
B –> C[nvidia-smi/系统信息]
C –> D{GPU可用?}
D –>|否| E[切换CPU模式]
D –>|是| F[检查驱动版本]
E –> G[OPENCLAW_COMPUTE_MODE=cpu]
G –> H[openclaw测试]
F –> I{驱动最新?}
I –>|否| J[更新驱动]
I –>|是| K[检查显存]
J –> K
K –> L[nvidia-smi内存]
L –> M{显存足够?}
M –>|否| N[减小批次/分配]
M –>|是| O[检查TDR超时]
N –> P[配置maxMemoryAllocation]
P –> H
O –> Q{计算 > 2秒?}
Q –>|是| R[拆分工作负载]
Q –>|否| S[检查温度]
R –> T[启用检查点]
T –> H
S –> U[监控GPU温度]
U –> V{温度 > 85°C?}
V –>|是| W[降频/暂停]
V –>|否| X[实现恢复机制]
W –> H
X –> Y[device.lost处理]
Y –> Z[自动重试3次]
Z –> AA[CPU回退]
AA –> H
H –> AB{成功?}
AB –>|是| AC[✅ 问题解决]
AB –>|否| AD[使用CPU模式]
AD –> AC






