附录 A 运行环境管理

仓颉 TensorBoost 需要设置环境变量 CANGJIETB_GRAPH_MODE 来设置运行模式,当 CANGJIETB_GRAPH_MODE=true 时,仓颉 TensorBoost 将以静态图模式运行,否则为动态图模式。如未设置此环境变量,默认以动态图模式运行。

此外仓颉 TensorBoost 提供了 Context 类型用于运行管理,并在 context 包里定义了 Context 对象 g_context。只要从 context 包中导入 g_context,即可使用 Context 类型提供的外部接口管理运行状态。

public var g_context: Context

Context 类提供的相关方法如下所述:

设置运行模式

public func setEagerMode(eagerMode: Bool): Unit

仅支持在调试版本使用,非调试版本会抛出异常提示,当 eagerMode 选择 true 时,表示动态图模式运行。

查看运行模式

public func isEagerMode(): Bool

查看当前是动态图模式运行还是静态图模式运行,如果返回 true ,表示当前在动态图模式运行。

设置 Device 类型

public func setDeviceTarget(device: String): Unit

函数 setDeviceTarget 用于设置 Device 类型,合法的输入有 "Ascend","GPU","CPU",不符合输入要求会抛出异常,目前仓颉 TensorBoost 发布的软件版本仅支持 "Ascend" 和 "GPU"。默认不显示设置的情况下,仓颉 TensorBoost 自动设置 Device 类型是 "GPU"。

获取 Device 类型

public func getDeviceTarget(): String

函数 getDeviceTarget 用于获取 Device 类型,返回值有 "Ascend" ,"GPU","CPU",分别表示 Device 类型是 Ascend,GPU 和 CPU。

获取 Tensor GC 阈值

public func getTensorSize(): Int64

Tensor 占用的内存总量超过释放阈值会自动释放不使用的 Tensor,具体详见张量释放章节。

选择 Device 编号

public func setDeviceId(deviceId: UInt32): Unit

当存在多张昇腾计算芯片时,函数 setDeviceId 用于选择设备编号,取值范围为[0, 4095],不在范围内会抛出异常。如果 Device 为 GPU 或 CPU 时此设置无效。

设置当前分布式后端

public func setBackend(backend: String): Unit

初始化通信服务需要的分布式后端,backend 是分布式后端的名称,当前仅支持输入"nccl",仅支持 GPU 硬件平台,不符合规则会抛出异常,默认值为"none"。

查询当前分布式后端

public func getBackend(): String

代码示例

以下为程序开始时设置运行信息的示例代码:

from CangjieTB import context.*

main(): Int64
{
    g_context.setSaveGraphs(true) // 保存计算图
    g_context.setDeviceTarget("GPU") // 运行设备为GPU

    // 测试代码写在此处
    return 0
}