弹性内存存储 EMS
弹性内存存储 EMS
链接复制成功!
获取错误码
调用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, CcKvOption, KvBufferWrapper
from ems.common.exception import EmsErrorCode
# 初始化cc配置
cc_config = CcConfig(rank_id=8, device_id=0, model_id="llama2-13b")
# 初始化Ems
config = EmsConfig(cc_config=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)
# 组成键值列表
key_list = ["hello_world"]
# 仅支持npu设备的tensor
data = torch.ones(1, 4, 2, device="npu:1")
data_len = data.numel() * data.element_size()
val_list = [[KvBufferWrapper(data.data_ptr, data_len)]]
# 支持超时重试。
retries = 0
while True:
try:
result = cc.load(option, key_list, val_list)
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}")
父主题: 异常处理