更新时间:2025-09-08 GMT+08:00
分享

获取错误码

调用EMS接口时,需要对EmsExcepiton异常进行捕获,并根据异常中不同错误码进行不同策略处理。

功能介绍

EMS捕获到接口异常,可以通过接口获取异常状态码。

方法定义

EmsExcepiton.status_code()

常见的状态码及其含义:

EMS异常状态码

描述

常见原因

解决方法

EMS_INVALID_ARGUMENT

请求参数错误

  • 请求参数不合法。

检查参数,修改后重试。

EMS_IO_ERROR

请求IO错误

  • EMS内存池故障。
  • SDK到EMS内存池连接断开。

将EMS服务隔离,待健康检查通过后恢复。

EMS_IO_TIMEOUT

请求IO超时

  • EMS内存池IO压力较大,业务繁忙。
  • SDK业务压力大,导致IO排队时间久。

增加超时时间后重试,或者将EMS服务隔离,待健康检查通过后恢复。

EMS_INTERNAL_ERROR

内部错误

  • SDK内部故障。
  • 访问加速卡内存故障。

将EMS服务隔离,待健康检查通过后恢复。

代码样例

本示例用于获取异常错误码为超时,进行重试 。

import os 
import time 
import torch, torch_npu 
from ems import Ems, EmsConfig, EmsException, CcConfig_v1, CcKvOption, KvBufferWrapper 
from ems.common.exception import EmsErrorCode 
# 初始化cc配置 
cc_config = CcConfig_v1(rank_id=8, device_id=0, model_id="llama2-13b") 
# 初始化Ems 
config = EmsConfig(cc_config_v1=cc_config) 
try: 
    Ems.init(config) 
except EmsException as e: 
    print(f"exception: {e}.") 
    exit(1) 
# 获取context caching对象 
cc = Ems.get_cc() 
if cc is None: 
    print("cc is None.") 
    exit(1) 
# 设置save请求的超时时间 
option = CcKvOption(timeout=100) 
 # hash语义下的保存和加载显存数据,参数:slot_mapping + hashes + offsets
block_size = 4
# 组成参数列表 
slot_mapping = [0, 1, 2, 3, 4, 5] 
hashes = [0x1111, 0x2222] 
offsets = [4, 4]  
# 支持超时重试。 
retries = 0 
while True: 
    try: 
        result = cc.load(slot_mapping, hashes, offsets, option) 
        break 
    except EmsException as e: 
        if e.status_code() != EmsErrorCode.EMS_IO_TIMEOUT or retries >= 3: 
            print(f"failed to load cause unrecoverable error or retries is more than 3:  {e.status_code()}.") 
            exit(2) 
        else: 
            # 增加超时时间,并睡眠10ms后重试 
            option.timeout = 1000 
            time.sleep(0.01) 
            print(f"retry after sleep 10ms.") 
print(f"load result: {result}")

相关文档