获取错误码
调用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}")