Allocator
产品支持情况
| 产品 | 是否支持 |
|---|---|
| Atlas A3 训练系列产品/Atlas A3 推理系列产品 | √ |
| Atlas A2 训练系列产品/Atlas A2 推理系列产品 | √ |
模块导入
from ge.allocator import Allocator, MemBlock
功能说明
Allocator 是外部内存分配器的抽象基类,用于自定义设备内存管理策略。MemBlock 表示已分配的内存块,持有设备内存地址和大小。用户需要继承 Allocator 类并实现 malloc 和 free 方法,然后通过 Session.register_external_allocator() 注册到指定 stream。
类定义
MemBlock 类
class MemBlock:
def __init__(self, addr: int, size: int)
@property
def addr(self) -> int
@property
def size(self) -> int
Allocator 类
class Allocator(ABC):
@abstractmethod
def malloc(self, size: int) -> MemBlock
@abstractmethod
def free(self, block: MemBlock) -> None
函数说明
MemBlock 类
__init__
def __init__(self, addr: int, size: int)
功能说明:创建内存块实例,持有设备内存地址和大小信息。
参数说明:
| 参数名 | 类型 | 必选/可选 | 说明 |
|---|---|---|---|
| addr | int | 必选 | 设备内存地址。 |
| size | int | 必选 | 内存大小,单位为字节。 |
返回值说明:无返回值。
addr(属性)
@property
def addr(self) -> int
功能说明:获取设备内存地址。
参数说明:无参数。
返回值说明:
| 返回值类型 | 说明 |
|---|---|
| int | 设备内存地址。 |
size(属性)
@property
def size(self) -> int
功能说明:获取内存大小。
参数说明:无参数。
返回值说明:
| 返回值类型 | 说明 |
|---|---|
| int | 内存大小,单位为字节。 |
Allocator 类
malloc
@abstractmethod
def malloc(self, size: int) -> MemBlock
功能说明:分配指定大小的设备内存,返回包含设备内存地址和大小的 MemBlock 对象。此为抽象方法,子类必须实现。
参数说明:
| 参数名 | 类型 | 必选/可选 | 说明 |
|---|---|---|---|
| size | int | 必选 | 待分配的内存大小,单位为字节。 |
返回值说明:
| 返回值类型 | 说明 |
|---|---|
| MemBlock | 已分配的内存块对象,包含有效的设备内存地址。 |
约束说明:
- 子类必须实现此方法,否则无法实例化。
- 分配失败时应抛出 MemoryError。
free
@abstractmethod
def free(self, block: MemBlock) -> None
功能说明:释放之前通过 malloc 分配的设备内存。此为抽象方法,子类必须实现。
参数说明:
| 参数名 | 类型 | 必选/可选 | 说明 |
|---|---|---|---|
| block | MemBlock | 必选 | 待释放的内存块对象,应为之前通过 malloc 返回的 MemBlock 实例。 |
返回值说明:无返回值。
约束说明:
- 子类必须实现此方法,否则无法实例化。
- 不应对同一内存块重复释放。