获取错误码
调用EMS接口时,需要对EmsExcepiton异常进行捕获,并根据异常中不同错误码进行不同策略处理。
功能介绍
EMS捕获到接口异常,可以通过接口获取异常状态码。
方法定义
EmsExcepiton.status_code()
常见的状态码及其含义:
EMS异常状态码 |
描述 |
常见原因 |
解决方法 |
---|---|---|---|
EMS_INVALID_ARGUMENT |
请求参数错误 |
|
检查参数,修改后重试。 |
EMS_IO_ERROR |
请求IO错误 |
|
将EMS服务隔离,待健康检查通过后恢复。 |
EMS_IO_TIMEOUT |
请求IO超时 |
|
增加超时时间后重试,或者将EMS服务隔离,待健康检查通过后恢复。 |
EMS_INTERNAL_ERROR |
内部错误 |
|
将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}")