在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

一、前言思考

1.1 单机算力不够怎么办

手机 NPU 再强也有上限:一台手机跑不动 13B 大模型、训练一个推荐模型要数小时、AR 场景需要同时跑多个模型。鸿蒙的分布式能力给出新答案:把身边所有设备的算力组成一个池子

  • 手机 + 平板 + 智慧屏 + 手表,闲置算力加起来远超单机;
  • 大模型拆到多设备并行推理,速度翻倍;
  • 联邦学习让模型"在设备上学习"而不收集数据。

1.2 分布式 AI 的三种范式

范式 是什么 适用
算力池化 多设备共同推理一个任务 大模型、重计算
模型拆分 模型按层/按样本拆到多设备 流水线并行、数据并行
联邦学习 数据不出设备,只同步梯度 个性化模型、隐私训练

二、底层原理

2.1 多设备算力池化

┌──────────────────────────────────────────┐
│            算力池化调度器                   │
│  任务分解 → 设备发现 → 负载评估 → 任务分发  │
└──────┬────────┬────────┬────────┬─────────┘
       ▼        ▼        ▼        ▼
   手机NPU    平板NPU   智慧屏    手表DSP
   (8T)      (20T)     (3T)     (0.5T)

调度器按设备算力权重分发子任务,快设备多分、慢设备少分,最后汇总。关键指标是通信开销必须小于并行收益——碎片任务拆分反而更慢。

2.2 模型拆分推理

两种拆分策略:

流水线并行(按层拆):模型层 1~N 分布在多设备上,数据像流水线一样流过:

设备A: 层1~10 ──▶ 设备B: 层11~20 ──▶ 设备C: 层21~30
  输入                   中间张量                输出

数据并行(按样本拆):同一模型复制到多设备,不同设备处理不同输入样本,梯度/结果合并:

设备A: batch[0..16] ──▶ 模型 ──▶ 部分结果 ─┐
设备B: batch[17..32] ─▶ 模型 ──▶ 部分结果 ─┼──▶ 合并 ──▶ 完整输出
设备C: batch[33..48] ─▶ 模型 ──▶ 部分结果 ─┘

2.3 联邦学习:隐私保护的分布式训练

              ┌─────────── 服务端(云端/可信设备) ───────────┐
              │  1.下发初始模型  4.聚合梯度  5.更新全局模型   │
              └────┬───────────────┬───────────────┬────────┘
                   ▼               ▼               ▼
              设备A(手机)      设备B(平板)      设备C(手表)
              ┌────────┐      ┌────────┐      ┌────────┐
              │本地训练 │      │本地训练 │      │本地训练 │
              │数据不出 │      │数据不出 │      │数据不出 │
              │2.算梯度 │      │2.算梯度 │      │2.算梯度 │
              │3.上传梯度│     │3.上传梯度│     │3.上传梯度│
              └────────┘      └────────┘      └────────┘

核心:原始数据永不离开设备,只上传模型梯度。配合差分隐私(见 2.4),即使梯度被截获也无法反推用户数据。

2.4 差分隐私

在梯度上添加可控噪声,让攻击者无法从梯度中反推具体样本,同时保证模型整体精度损失可控:

噪声梯度 = 真实梯度 + Laplace噪声(敏感度 / ε)
ε 越小 → 隐私越强 → 噪声越大 → 精度损失越大

三、实战落地

3.1 算力池化:多设备协同推理

import { distributedAI } from '@kit.AiKit';
import { distributedDeviceManager } from '@kit.DistributedServiceKit';

// 1. 发现附近可用设备
const devices = await distributedDeviceManager.getAvailableDevices({
  capability: 'ai-compute'   // 只找声明了AI算力的设备
});

// 2. 构建设备集群
const cluster = await distributedAI.createComputeCluster({
  devices: devices.map(d => d.deviceId)
});

// 3. 大模型任务分发(自动按算力拆分)
const result = await cluster.runInference({
  modelId: 'llm_7b',
  input: promptData,
  splitStrategy: 'pipeline'   // 流水线拆分
});

// 4. 释放集群
cluster.release();

3.2 模型拆分推理

// 按层拆分: 每台设备加载部分层
const layerPlan = distributedAI.planLayerSplit({
  totalLayers: 32,
  deviceCapacities: [8, 20, 3],   // 各设备算力(TOPS)
});

// 设备B(平板,最强)分到最多的层
console.log(layerPlan);  // [{device: 'A', layers: [0..7]},
                         //  {device: 'B', layers: [8..23]},
                         //  {device: 'C', layers: [24..31]}]

3.3 联邦学习:设备端本地训练

import { federatedLearning } from '@kit.AiKit';

// 1. 创建联邦学习客户端
const client = federatedLearning.createClient({
  serverUrl: 'https://fl.example.com',
  modelName: 'keyboard_prediction'
});

// 2. 本地训练(数据不出设备)
const round = await client.trainLocal({
  dataSource: localTypingData,   // 本地输入法数据
  epochs: 3,
  batchSize: 32
});

// 3. 只上传梯度(不传数据)
await client.uploadGradient(round.gradient, {
  differentialPrivacy: { epsilon: 2.0 }   // 差分隐私保护
});

// 4. 拉取聚合后的新模型
const newModel = await client.fetchGlobalModel();

四、性能排查与优化

问题 表现 优化手段
拆分后更慢 通信开销 > 并行收益 粗粒度拆分、压缩中间张量
设备掉线 某设备断开 任务可重分配、检查点续跑
梯度同步慢 每轮训练 10min+ 梯度量化、稀疏化、异步更新
数据异构 设备数据分布不均衡 加权聚合(样本量加权)
通信泄露 梯度被截获 同态加密、差分隐私、TLS

4.1 中间张量压缩

流水线并行时设备间传输的是中间激活,压缩能大幅降低通信量:

// 量化中间张量为 FP16 或 INT8
const tensor = await nextDevice.send(quantize(activation, 'int8'));

4.2 异步联邦更新

传统联邦是同步聚合(等所有设备完成),慢设备拖累整体。改异步:快设备先聚合,慢设备后到,牺牲轻微收敛速度换取吞吐量。

4.3 设备掉线容错

训练中断 → 检查点机制 → 任务重分配到可用设备 → 从检查点续跑

五、总结

  1. 分布式 AI 三范式:算力池化(合算力)、模型拆分(并行化)、联邦学习(隐私训练)。
  2. 拆分的收益边界是通信开销:粒度太细反而亏本,先评估再拆。
  3. 联邦学习是隐私与智能的平衡器:数据不出设备 + 差分隐私 + 梯度安全传输。
  4. 工程上必须容错:设备掉线、网络抖动、数据异构都要有预案。

一句话记住:算力不够设备凑,模型太大切三块,数据敏感就联邦。


🚀 演示功能优化(随项目同步更新)

本文对应的 ArkTS 演示页面已随项目整体优化,主要改进:

  1. 独立主题风格:星云蓝黑 · 节点连线风卡片,与其余章节演示页明显区分,不再千篇一律。
  2. 步骤回放动画:点击演示按钮后,结果行按 260~320ms/步 逐步展示,模拟真实推理过程。
  3. 运行态保护:演示过程中按钮置灰防重复触发,页面退出自动清理定时器。
  4. 结果摘要:演示结束后自动给出「一句话结论」,并 Toast 提示完成。
  5. AI 对话演示:新增 AiChatDemo(根目录 main.py 的 ArkTS 移植),真实 SSE 流式大模型请求,首页「★ AI Chat 流式对话演示」可进入。

对应页面:entry/src/main/ets/pages/DistAiDemo.ets


🧪 演示优化:真实 AI 推理接入(v3)

本演示页顶部新增 AI 分布式调度主卡,点击即真实调用云端大模型(SSE 流式),不再是纯模拟回放:

  • 请求链路utils/AiClient.ets(ArkTS 封装 OpenAI 兼容接口)→ POST https://api-ai.gitcode.com/v1/chat/completions,模型 deepseek-ai/DeepSeek-V4-Flash,流式 stream: true
  • 演示场景:分布式推理 / FedML 联邦学习 / 参数同步 —— 每个场景绑定不同分布式 AI 专家 Prompt,返回内容各有差异
  • 交互体验:进入页面自动触发一次真实推理;点场景标签切换并重新请求;按钮手动触发;输出区打字机流式展示
  • 真实标识:卡片右上角 LIVE 徽标 + 端点/模型名水印,保证"所见即所调"
Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐