Skip to content

feat: add PrivateUse1 backend extension support - #206

Open
chen2021673 wants to merge 1 commit into
masterfrom
refactor/privateuse1-backend
Open

feat: add PrivateUse1 backend extension support#206
chen2021673 wants to merge 1 commit into
masterfrom
refactor/privateuse1-backend

Conversation

@chen2021673

@chen2021673 chen2021673 commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

背景

InfiniTrain 原有设备体系只包含 CPU 和 CUDA。接入新的后端时,需要在核心框架中增加厂商专属的 DeviceType、runtime、CCL、kernel 以及模型侧判断,导致核心代码与具体厂商耦合。

本 PR 引入通用的 DeviceType::kPrivateUse1 扩展槽位,使外部厂商后端可以在不修改 InfiniTrain 核心设备枚举和模型逻辑的情况下注册自己的实现。MACA 后端将作为独立仓库使用该接口接入。

主要改动

PrivateUse1 注册接口

新增 PrivateUse1BackendRegistrationRegisterPrivateUse1Backend(),统一编排以下注册流程:

  • 注册厂商可见名称,例如 maca
  • 注册 DeviceGuardImpl
  • 注册 backend kernels
  • 可选注册 CclImpl
  • 校验基础 runtime 和 kernel 是否注册完整
  • 限制一个进程最多注册一个 PrivateUse1 provider

保留并复用现有三个注册宏:

  • REGISTER_KERNEL
  • INFINI_TRAIN_REGISTER_DEVICE_GUARD_IMPL
  • INFINI_TRAIN_REGISTER_CCL_IMPL

PrivateUse1 后端至少需要提供以下基础算子:

  • Cast
  • Fill
  • NoOpForward
  • NoOpBackward

设备名称解析

新增统一的 Device::ParseType()

  • cpu 映射到 kCPU
  • cuda 映射到 kCUDA
  • privateuse1 映射到 kPrivateUse1
  • 注册后的厂商名称,例如 maca,映射到 kPrivateUse1

Device::ToString() 同样使用注册后的厂商名称展示设备。

Example 外部后端入口

GPT2、LLaMA3 和 Mixtral example 支持在解析 --device 前调用外部 backend registrar,同时不直接依赖任何厂商头文件。
外部仓库可以注入:

  • backend 声明头文件
  • backend 注册函数

Test

image image

- add a provider-neutral PrivateUse1 device type and registration API
- validate runtime, kernel, and optional CCL backend registrations
- initialize external device runtimes lazily on first use
- support provider names in device parsing and display
- require explicit autocast dtype for PrivateUse1 devices
- allow examples to register an external backend before flag parsing
- honor average_in_collective consistently across DDP paths
- expose embeddable CMake targets and add fake backend tests
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant