Google HEIR:把同态加密推理变成可编译、可部署的工程能力

2026-08-24 38 预计阅读时间: 1 分钟
来源: infoq.com AI 摘要 Original link

Disclaimer: This article is an AI-assisted summary. Read it together with the original source when precision matters. The summary may omit context, version differences, or edge cases and is not official documentation.

预计阅读时间:11 分钟

同态加密长期面临一个现实问题:数据可以在不解密的情况下参与计算,但真正把普通 AI 模型改造成能够处理密文输入的版本,往往需要密码学、编译器和模型部署经验的交叉协作。Google 推出的 HEIR(Homomorphic Encryption Intermediate Representation)试图从编译器和工具链层面降低这道门槛,让同态加密推理更接近一次可重复的构建流程。

HEIR 的核心方向并不是重新训练一套“加密模型”,而是让原本面向明文输入、已经训练完成的模型,经过编译和转换后能够在加密数据上运行。这会把问题从“手工重写每个算子”转向“定义中间表示、完成算子转换,并针对目标同态加密方案生成代码”。

难点从密码学扩展到编译器

在普通推理服务中,模型接收浮点张量,执行矩阵乘法、加法、激活函数等操作,最后返回预测结果。同态加密要求服务端只看到密文,但密文计算并不等价于普通数值计算:

  • 可支持的运算类型取决于底层同态加密方案。
  • 乘法深度、噪声增长和密文尺寸会影响可计算范围与性能。
  • 许多神经网络中的非线性操作无法直接以原始形式执行,可能需要近似或替换。
  • 数据布局、定点编码、批处理方式和参数选择会成为模型部署的一部分。

因此,单纯把模型文件交给加密库通常不够。工具链需要理解模型的计算图,识别哪些操作能够映射到密文计算,必要时进行算子替换、数值表示转换和目标后端 lowering。HEIR 的价值就在于提供一个面向同态加密的中间表示和编译路径,使这些步骤能够被系统化。

从预训练模型到密文推理

可以把 HEIR 所代表的工程流程理解为四个阶段:

  1. 导入模型:读取已经训练好的模型及其计算图。
  2. 转换表示:将普通张量运算转换为适合同态加密的中间表示。
  3. 检查与优化:分析乘法深度、支持的算子、数值精度和参数约束。
  4. 生成运行时代码:连接具体的同态加密后端,完成密钥管理、加密输入、密文推理和结果解密。

这种设计把模型开发和加密后端之间隔离开来。模型团队可以继续使用熟悉的训练框架,密码学或基础设施团队则可以关注后端实现、参数配置和部署性能。实际能否“一键完成”,仍取决于模型算子、目标后端和参数配置,但编译器抽象至少提供了一个稳定的协作边界。

需要注意的是,“支持预训练模型”不代表所有模型都能原样编译。模型中使用的激活函数、归一化、比较操作和动态控制流,可能需要近似、静态化或改写。对于边缘设备、隐私推理服务和跨组织数据分析,密文计算带来的隐私收益可能值得付出额外的延迟和资源成本;对于低延迟在线推荐,则必须先用真实模型和真实参数进行基准测试。

一个可改造的推理流水线示例

下面的示例用一个最小 Python 程序模拟“模型编译到密文后端”的接口边界。它不是 HEIR 的官方 API,也没有执行真实同态加密,用途是帮助工程团队先固定应用层流程:模型导出、编译检查、客户端加密、服务端推理、客户端解密。接入实际 HEIR 和具体后端时,可以替换 Compilerencryptdecrypt 的实现。

将下面内容保存为 encrypted_inference_pipeline.py,可直接运行:

from dataclasses import dataclass
from typing import List


@dataclass
class CompiledModel:
    name: str
    backend: str
    max_multiplicative_depth: int


class Compiler:
    def compile(self, model_name: str, backend: str) -> CompiledModel:
        # 实际项目中,这里应调用 HEIR 及选定的同态加密后端。
        return CompiledModel(
            name=model_name,
            backend=backend,
            max_multiplicative_depth=4,
        )


def encrypt(values: List[float]) -> List[float]:
    """示例占位实现:真实系统应使用公钥和同态加密库。"""
    return values


def encrypted_infer(model: CompiledModel, ciphertext: List[float]) -> List[float]:
    if model.max_multiplicative_depth < 1:
        raise ValueError("模型的乘法深度超过编译配置")

    # 用一个简单线性层模拟密文域计算,真实后端不会直接操作明文列表。
    weights = [0.2, -0.1, 0.7]
    return [sum(x * w for x, w in zip(ciphertext, weights))]


def decrypt(ciphertext: List[float]) -> List[float]:
    """示例占位实现:真实系统应使用私钥解密。"""
    return ciphertext


if __name__ == "__main__":
    compiled = Compiler().compile(
        model_name="fraud-detector-v1",
        backend="homomorphic-encryption-backend",
    )

    user_features = [0.8, 0.2, 0.6]
    encrypted_features = encrypt(user_features)
    encrypted_result = encrypted_infer(compiled, encrypted_features)
    prediction = decrypt(encrypted_result)

    print(f"compiled={compiled.name} backend={compiled.backend}")
    print(f"prediction={prediction[0]:.4f}")

运行命令:

python3 encrypted_inference_pipeline.py

把这个示例接入真实工具链时,建议先明确三类配置:

model:
  name: fraud-detector-v1
  input_encoding: fixed_point
  allowed_operations:
    - add
    - multiply

compiler:
  intermediate_representation: heir
  target_backend: your_homomorphic_encryption_backend
  max_multiplicative_depth: 4

runtime:
  encrypt_on_client: true
  decrypt_on_client: true
  return_plaintext_to_server: false

这里的配置字段是工程侧的示意,具体名称需要按照采用的 HEIR 版本和后端适配器调整。关键原则是:私钥保留在客户端或可信边界内,服务端只接触密文;编译阶段记录算子支持范围和深度约束;运行阶段对密文尺寸、延迟、失败重试和密钥轮换建立监控。

落地时要测量什么

同态加密推理的瓶颈通常不是单个 API 调用,而是端到端成本。评估 HEIR 方案时,可以把以下指标纳入基准测试:

  • 编译成功率:模型中的算子有多少可以直接映射,哪些需要改写。
  • 精度损失:定点编码和近似激活函数是否改变业务决策结果。
  • 端到端延迟:包括加密、上传、密文推理、下载和解密。
  • 密文膨胀:输入、输出和中间结果的大小是否适合网络传输。
  • 计算资源:服务端 CPU、内存和并行度需求。
  • 密钥边界:谁持有公钥、私钥和评估密钥,密钥轮换如何进行。

最稳妥的采用路径是从小型、静态、算子集合有限的模型开始,例如单层或浅层分类器,再逐步扩大到更复杂的网络。不要只比较明文推理和密文推理的模型执行时间;如果忽略客户端加密和结果解密,结论很容易偏离真实用户体验。

采用建议

HEIR 的意义在于把同态加密从密码学库调用提升为编译和部署问题。对于希望在不暴露原始数据的前提下提供推理服务的团队,这种中间表示和工具链思路有助于复用已有模型资产,也能让模型工程师与加密后端工程师围绕明确的接口协作。

但它不会自动消除同态加密的边界条件。上线前仍需要确认模型算子是否支持、精度是否可接受、参数是否满足乘法深度限制,以及延迟和成本是否符合业务目标。可以用下面的清单作为第一轮评审入口:

  • 模型计算图已经导出并固定。
  • 所有算子都有明确的密文实现或近似方案。
  • 编译器报告中的乘法深度和数值误差处于可接受范围。
  • 私钥不会进入推理服务端。
  • 基准测试覆盖加密、传输、推理和解密全链路。
  • 失败、超时、密钥轮换和版本兼容策略已经定义。

当这些条件都能被测试和监控覆盖时,HEIR 才真正从“有前景的编译器项目”变成可以纳入生产架构评估的工程组件。


相关推荐