常见问题

常见问题 FAQ

兼容性

  1. 文档里中提到AOP SDK只支持python 3.8~3.10,是否可以用除此之外的版本,如果不能原因是什么?

回答:目前仅支持 python 3.8~3.10。主要AOP框架底层ACE引擎支持新版本有额外开发工作,后续产品规划将支持常见版本。

  1. 平台支持的浏览器是什么?

回答: 为了确保最佳使用体验,建议您使用以下浏览器访问平台,以获得完整的功能体验和最佳性能表现。

  • Google Chrome
  • Mozilla Firefox
  • Microsoft Edge

众包数据标注

  1. 发题时报错,错误信息类似于 capData.projectId = str(CROUD_SOURCING_DATA['projectId']) TypeError: 'NoneType' object is not subscriptable" })) })

回答:需要保证以下步骤正确执行:

  • 从有灵平台 clone 的项目代码中的 idl 包含最新的众包能力
  • 用最新的 idl 生成了代码,例如 python idl.py -gf
  • 将项目中的 aop.idl.json 提交到了 git 仓库
  • 通过有灵平台发布了含有对应的 human 类型的能力
  • 有灵平台上可视化编辑页面,侧边栏 “页面” 中有能力对应的页面
  • 发布服务器时同时勾选了 “前端页面”和“后端服务器”
  • 如果是主干服务器,在众包平台上完善了任务模板,并审核通过。
  • 有灵平台发布日志中显示“发布成功“

SDK 数据查询

  1. SDK 数据查询:使用 fuxi.aop.runtime.Dataset.fetch 报错 :" Lost connection to MySQL server during query (timed out)')"

回答:查询数据量太大导致超时或者 TiDB 内存不足。

建议

  • 默认每次查询 10000 条数据,可以通过 fetch 的 limit 参数调小每次查询的数据量,建议每次查询的数据量小于 100MB。例如:如果 persist 传入的 input 和 output 数据大小之和为 1MB,那么使用 fetch 查询数据时 offset 参数最大只能设置为 100。

  • 数据量很大时,建议用索引 id 或 (agentId, dataId) 或 createTime 查询。

  • 每次查询时,记录一下最后那条的 agentId 和 dataId。下一次查询 where 增加 where=['agentId>"{}" or (agentId="{}" and dataId>{})'.format(agentId, agentId,dataId)])。

async def main():
    await AOP.init(config=sdk.get_server_config("11035"))
    dataset = await Dataset.init(config=sdk.get_server_config("11035"))
    table_name = 'excavator_cat_train'
    limit = 100
    aop_data_num = 0
    dataId = 0
    agentId = ''
    table = await dataset.load(table_name, schema=(CapInput, CapOutput))
    while True:
        records: List[RecordRef[CapInput, CapOutput]] = await table.fetch(limit=limit,
                where=['agentId>"{}" or (agentId="{}" and dataId>{})'.format(agentId, agentId,dataId)])
        if not records:
            break
        agentId = records[-1].traceInfo.agentId
        dataId = records[-1].traceInfo.dataId
        aop_data_num += len(records)
        logger.info(f"current {aop_data_num}, dataId: {dataId}")
  1. 使用 fuxi.aop.runtime.Dataset.fetch 查询数据时比较慢(速度在 40Mbps 或者 5MB/s 以下)

回答:机房外网络访问限制了带宽,如果需要查询的数据量比较大时可以切换到机房内的机器上执行(例如丹炉上的机器),在内网环境下访问速度会提升到 800Mbps 左右

  1. 使用 fuxi.aop.runtime.Dataset.fetch 查询数据时,用 createTime 字段作为 order_by 条件,查询结果与实际数据产生的时间顺序不一致

回答:数据库中的 createTime 是数据入库的时间,与调用 persist 的时间并不完全一致,存在两种情况:

  • 使用网络回传时,由于云端为分布式架构,为了保证性能,没有保证全局 createTime 的时序性,针对每条数据可能产生不同程度的延迟,当网络环境较差时,可能存在部分数据延迟很大的情况。
  • 使用硬盘摆渡时,createTime 为接入点上传数据时产生的时间,与调用 persist 的时间无关。
  1. 使用 fuxi.aop.runtime.Dataset.fetch 查询数据时,用 createTime 字段作为 where 条件排序查询时间范围内的数据,查询结果与实际数据产生的时间不一致

回答: 数据库中的 createTime 是数据入库的时间,与调用 persist 的时间并不完全一致。sdk 目前没有记录调用 persist 的时间,需要在输入或者输出参数中显式传入。

SDK 数据上传

  1. 使用 async with 方法打开 Image 对象后上传的数据中没有 _url

回答

  • 如果是在端侧设备上查看数据没有 _url 属于正常情况,端侧在网络不稳定的情况下有概率出现没有 _url 的情况。当数据通过接入点或者网络回传到云端后,会自动补充 _url 字段。

  • 如果在数据集中查看数据没有 _url,需要保证 persist 在 async with Image 的上下文中执行:

    • 正确方式
    async with (await Image.from_mat_async(mat)) as img:
        await auto.truck_recognition_ai.persist((img,))
    • 错误方式
     
    img_to_persist = None
     
    async with (await Image.from_mat_async(mat)) as img:
        some_img_processor(img)
        img_to_persist = img
        
    await auto.truck_recognition_ai.persist((img_to_persist,))
  1. 出现报错 {"expecting_type": ..., "given_object": ...}

回答

IDL 中定义的类型与 persist 中传入参数的类型不一致。比较类型时,需要从 IDL 中 Obervation,State, Action, Reward 下一层开始比较,例如:

  • IDL 中定义类型:imu: State[List[Vector[float, Size[3 + 4 + 4]]]]
  • 调用 persist: excavator_agent.exnextstate.persist((imu,)) 其中 imu 必须为List[Vector[float, Size[11]]] 类型,Vector 的长度也必须是 11

如果 imu 可能为 None,那么 IDL 中需要定义成 State[Optional[List[Vector[float, Size[3 + 4 + 4]]]]] 类型

  1. 数据上传失败,出现报错 NetworkException: rpc error 和 is not active for 30000ms time

回答:上传数据量过大,可以考虑对数据进行压缩,或者调大带宽。可以在 ./device_config.json 文件中,写入 max_data_upload_bandwidth 配置来修改带宽。例如如果要将带宽设置为 10Mbps,可以写成:

{"max_data_upload_bandwidth": "10Mbps"} 

其他问题

  1. SDK 日志:使用logging.config.fileconfig(xxx.config)对用户应用自身log模块进行配置后,sdk日志不能正常打到终端

回答

logging.config.fileConfig('test.conf', disable_existing_loggers=False)

使用logging.config模块配置日志时,需要把disable_existing_loggers参数改为False,否则第三方库的日志模块会失效

  1. 平台调试:目前平台是否支持调试模式?

回答:目前平台仅支持生成代码和自定义代码的调试,即云端objectser的调试。AI能力的推理、训练和评估等调试模式预计在Q2季度提供