文件最后提交记录最后更新时间
benchmarks/common/tcp_client_server.cpp增加链接重试和超时 Co-authored-by: xumengxuan<xumengxuan2@huawei.com> # message auto-generated for no-merge-commit merge: !70 merge fix_bug_benchmark into master benchmarks/common/tcp_client_server.cpp增加链接重试和超时 Created-by: xumengxuan Commit-by: xumengxuan Merged-by: turing_project1 Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> benchmark执行依赖两个进程启动的顺序且tcp server会一直等待链接 1.TCPClient::ConnectToServer增加链接重试操作 2.TCPServer::AcceptConnection接收链接增加超时机制 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #123--> ## 测试 <!--描述进行了哪些测试来验证你的改动。--> 1.仅启动TCPServer侧,查看是否有链接重试操作:结果符合预期 2.仅启动TCPServer侧,查看是否在超时时间后停止等待:结果符合预期 3.正常启动两侧,查看是否能够正常建链:结果符合预期 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/hixl!706 个月前
[Bigfix]断链过程中,如果无法连接server,则主动销毁本端client Co-authored-by: zhaozhihui<zhaozhihui5@huawei.com> # message auto-generated for no-merge-commit merge: !81 merge dev into master [Bigfix]断链过程中,如果无法连接server,则主动销毁本端client Created-by: zhaozhihui Commit-by: zhaozhihui Merged-by: turing_project1 Description: ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 代码重构 - [ ] 文档更新 - [ ] 其他,请描述: ## 描述 <!--简要描述本次改动的背景,包括改动的原因、解决的问题等。--> 1.client向server发送断链消息时,如果server没有响应,client应该销毁本地资源然后返回。server收不到心跳自动清理资源。当前client发送消息失败直接返回了。 2.忽略socket异常关闭导致client发送消息导致进程退出 3.socket关闭后不再发送心跳 ## 测试项 <!--描述进行了哪些测试来验证本次改动,或新增了哪些测试用例。--> HixlSTest.TestHixlServerDown ## 测试结果 <!--描述上述测试项的测试结果,可通过表格、图片等形式展示。--> 用例执行成功 ## Checklist <!-- [x] 表示选中 --> - [x] 该Pull Request的代码风格和项目的代码风格一致 - [x] 提交的代码已经过充分的验证 - [x] 涉及的相关文档修改已更新 - [x] 标题中正确使用了类型标签(例如:feat/bugfix/refactor/docs/test等) ## 其它(可选) <!--可以在这里描述任何和该Pull Request相关的说明。--> See merge request: cann/hixl!815 个月前
readme增加执行前检查设备TLS Co-authored-by: x00940118<xumengxuan2@huawei.com> # message auto-generated for no-merge-commit merge: !64 merge add_readme_TLS into master readme增加执行前检查设备TLS Created-by: xumengxuan Commit-by: x00940118 Merged-by: turing_project1 Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 1.examples、benchmarks的readme增加执行前检查设备TLS 2.修改build.md中支持的python版本 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #123--> ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> 更新了benchmarks/README.md、examples/cpp/README.md、examples/python/README.md、docs/build.md ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: See merge request: cann/hixl!646 个月前
代码告警清理 Co-authored-by: x00940118<xumengxuan2@huawei.com> # message auto-generated for no-merge-commit merge: !12 merge clean_code into master 代码告警清理 Created-by: xumengxuan Commit-by: x00940118 Merged-by: turing_project1 Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 代码告警清理 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #123--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:代码告警清理 See merge request: cann/hixl!126 个月前
README.md

目录

Benchmarks

该目录提供了HIXL的benchmark性能用例,支持用户根据需要传输的数据大小对benchmark进行改造以快速进行性能测试和评估。

目录结构

├── benchmarks
|   ├── common                                         // 公共函数目录
|   ├── benchmark.cpp                                  // HIXL的数据传输benchmark用例
|   ├── CMakeLists.txt                                 // 编译脚本

环境要求

  • 操作系统及架构:Euleros x86系统、Euleros aarch64系统
  • 编译器:g++
  • 芯片:Atlas A3 训练/推理系列产品、Atlas 800I A2 推理产品/A200I A2 Box 异构组件
  • 已完成昇腾AI软件栈在运行环境上的部署

程序编译

  1. 参考构建里的编译执行章节,利用build.sh的--examples参数进行编译。

  2. 编译结束后,在build/benchmarks目录下生成可执行文件。

执行前准备

执行前请先确认两个device之间互通,可以用hccn_tool按照以下步骤确认两个设备之间的连通性,假设要测试a和b两台设备间的连通性:

  1. 用hccn_tool查询b的device_ip
hccn_tool -i ${device_id_b} -ip -g  

其中&#36;{device_id_b}为b设备的device_id。

  1. 用hccn_tool检测a到b的连通性
hccn_tool -i ${device_id_a} -ping -g address ${ip_address_b}

其中&#36;{device_id_a}为a设备的device_id,${ip_address_b}为第一步中查出的b设备的device_ip。

  1. 将ab互换重复执行步骤1和2,检测b到a的连通性

假如返回结果出现类似于recv time out seq=0的字样,说明两个设备之间不连通,请更换device_id,选择连通的一对执行用例。

  1. 检查设备之间TLS设置是否一致:
# 检查设备的TLS状态
for i in {0..7}; do hccn_tool -i $i -tls -g; done | grep switch

# TLS使能的设备和TLS不使能的设备无法建链,建议统一保持TLS关闭
for i in {0..7}; do hccn_tool -i $i -tls -s enable 0; done

:Atlas A3 训练/推理系列产品一卡双带之间不互通,0号和1号device不通,2号和3号device不通,以此类推,需要在执行时将device_id进行替换。

Benchmark运行

  • 说明:

    • 所有benchmark需要成对执行,client侧和server侧启动执行间隔时间不要过长,代码中默认设置kWaitTransTime为20s,用户可根据实际情况自行修改此变量的值以保证用例成功运行。
    • 所有benchmark默认传输数据大小kTransferMemSize为128M,用户可根据需要自行修改。执行成功后会打印类似如下的日志,其中block size表示每次传输的内存块大小;transfer num表示传输次数;time cost表示总的传输耗时;throughput表示传输的吞吐(带宽)。
      [INFO] Transfer success, block size: 8388608 Bytes, transfer num: 16, time cost: 1044 us, throughput: 119.732 GB/s
      
  • 配置环境变量

    • 若运行环境上安装的“Ascend-cann-toolkit”包,环境变量设置如下:

      source ${HOME}/Ascend/ascend-toolkit/set_env.sh
      

      “$HOME/Ascend”请替换相关软件包的实际安装路径。

    • 若运行环境上安装的“CANN-XXX.run”包,环境变量设置如下:

      source ${HOME}/Ascend/latest/bin/setenv.bash
      

      “$HOME/Ascend”请替换相关软件包的实际安装路径。

  • 在运行环境执行可执行文件。

    • 执行benchmark,client-server模式,可通过参数传递来执行多种传输场景
      • 参数说明

        参数名 可选/必选 描述
        device_id
        必选
        当前engine要使用的device_id
        local_engine 必选 当前engine的ip
        其中,client侧格式为 ip;server侧格式为 ip:port
        remote_engine 必选 远端engine的ip
        其中,client侧格式为 ip;server侧格式为 ip:port
        tcp_port 必选 tcp通信端口
        transfer_mode 必选 传输的模式
        取值范围:d2d、h2d、d2h 和 h2h
        transfer_op 必选 传输的操作
        取值范围:write 或 read
        use_buffer_pool 必选 是否开启中转内存池
        取值范围:true 或 false
      • 测试HIXL引擎通过HCCS链路进行传输的带宽, 以d2d场景,写操作,不开启中转内存池为例:

        • 执行client benchmark:

          ./benchmark 0 10.10.10.0 10.10.10.0:16000 20000 d2d write false
          
        • 执行server benchmark:

          ./benchmark 1 10.10.10.0:16000 10.10.10.0 20000 d2d write false
          
      • 测试HIXL引擎通过RDMA链路进行传输的带宽, 以d2d场景,写操作,不开启中转内存池为例:

        • 执行client benchmark:

          HCCL_INTRA_ROCE_ENABLE=1 ./benchmark 0 10.10.10.0 10.10.10.0:16000 20000 d2d write false
          
        • 执行server benchmark:

          HCCL_INTRA_ROCE_ENABLE=1 ./benchmark 1 10.10.10.0:16000 10.10.10.0 20000 d2d write false
          

    :HCCL_INTRA_ROCE_ENABLE=1表示使用RDMA进行传输

  • 约束说明

    • Atlas 800I A2 推理产品/A200I A2 Box 异构组件,该场景下Server内采用HCCS传输协议时,仅支持d2d。
    • Atlas A3 训练/推理系列产品,该场景下采用HCCS传输协议时,不支持Host内存作为远端Cache。

性能数据

本节展示了HIXL在昇腾A3芯片上部分场景传输数据的实测性能:

  • 单机场景

    (1) WRITE:

    传输内存块大小 HCCS D2D HCCS D2D BufferPool RDMA D2D RDMA D2D BufferPool
    1M 106.293 GB/s —— 22.657 GB/s ——
    2M 115.101 GB/s —— 22.661 GB/s ——
    4M 120.192 GB/s —— 22.670 GB/s ——
    8M 123.518 GB/s —— 22.665 GB/s ——
    传输内存块大小 HCCS H2D HCCS H2D BufferPool RDMA H2D RDMA H2D BufferPool
    1M 32.748 GB/s 35.331 GB/s 22.649 GB/s 19.072 GB/s
    2M 33.494 GB/s 35.572 GB/s 22.653 GB/s 19.084 GB/s
    4M 33.811 GB/s 36.263 GB/s 22.657 GB/s 19.078 GB/s
    8M 33.940 GB/s 33.793 GB/s 22.653 GB/s 18.521 GB/s
    传输内存块大小 HCCS D2H HCCS D2H BufferPool RDMA D2H RDMA D2H BufferPool
    1M —— 30.157 GB/s 22.661 GB/s 18.651 GB/s
    2M —— 30.532 GB/s 22.657 GB/s 18.916 GB/s
    4M —— 30.414 GB/s 22.649 GB/s 18.971 GB/s
    8M —— 29.453 GB/s 22.657 GB/s 18.469 GB/s
    传输内存块大小 HCCS H2H HCCS H2H BufferPool RDMA H2H RDMA H2H BufferPool
    1M —— 28.617 GB/s 22.633 GB/s 18.431 GB/s
    2M —— 28.822 GB/s 22.649 GB/s 18.464 GB/s
    4M —— 28.775 GB/s 22.641 GB/s 18.508 GB/s
    8M —— 28.571 GB/s 22.645 GB/s 18.345 GB/s

    (2) READ:

    传输内存块大小 HCCS D2D HCCS D2D BufferPool RDMA D2D RDMA D2D BufferPool
    1M 124.131 GB/s —— 22.616 GB/s ——
    2M 137.363 GB/s —— 22.633 GB/s ——
    4M 144.342 GB/s —— 22.620 GB/s ——
    8M 148.104 GB/s —— 22.629 GB/s ——
    传输内存块大小 HCCS H2D HCCS H2D BufferPool RDMA H2D RDMA H2D BufferPool
    1M 33.940 GB/s 33.684 GB/s 22.608 GB/s 18.939 GB/s
    2M 34.877 GB/s 34.771 GB/s 22.624 GB/s 19.003 GB/s
    4M 35.261 GB/s 34.751 GB/s 22.629 GB/s 19.151 GB/s
    8M 35.481 GB/s 32.826 GB/s 22.624 GB/s 19.011 GB/s
    传输内存块大小 HCCS D2H HCCS D2H BufferPool RDMA D2H RDMA D2H BufferPool
    1M —— 41.681 GB/s 22.596 GB/s 19.278 GB/s
    2M —— 42.720 GB/s 22.604 GB/s 19.263 GB/s
    4M —— 43.298 GB/s 22.596 GB/s 19.362 GB/s
    8M —— 41.848 GB/s 22.600 GB/s 19.254 GB/s
    传输内存块大小 HCCS H2H HCCS H2H BufferPool RDMA H2H RDMA H2H BufferPool
    1M —— 27.685 GB/s 19.626 GB/s 18.738 GB/s
    2M —— 28.185 GB/s 22.633 GB/s 18.710 GB/s
    4M —— 27.156 GB/s 22.629 GB/s 18.735 GB/s
    8M —— 29.426 GB/s 22.629 GB/s 18.637 GB/s
  • 双机场景

    (1) WRITE

    传输内存块大小 HCCS D2D HCCS D2D BufferPool RDMA D2D RDMA D2D BufferPool
    1M 91.777 GB/s —— 17.919 GB/s ——
    2M 106.383 GB/s —— 22.649 GB/s ——
    4M 115.101 GB/s —— 22.653 GB/s ——
    8M 119.732 GB/s —— 22.653 GB/s ——
    传输内存块大小 HCCS H2D HCCS H2D BufferPool RDMA H2D RDMA H2D BufferPool
    1M 18.334 GB/s 36.433 GB/s 22.608 GB/s 18.857 GB/s
    2M 18.651 GB/s 36.765 GB/s 22.612 GB/s 18.825 GB/s
    4M 18.822 GB/s 36.808 GB/s 22.616 GB/s 18.662 GB/s
    8M 18.942 GB/s 35.982 GB/s 22.608 GB/s 18.187 GB/s
    传输内存块大小 HCCS D2H HCCS D2H BufferPool RDMA D2H RDMA D2H BufferPool
    1M —— 28.842 GB/s 22.608 GB/s 18.593 GB/s
    2M —— 28.888 GB/s 22.616 GB/s 18.499 GB/s
    4M —— 29.097 GB/s 22.620 GB/s 18.524 GB/s
    8M —— 28.261 GB/s 22.616 GB/s 18.437 GB/s
    传输内存块大小 HCCS H2H HCCS H2H BufferPool RDMA H2H RDMA H2H BufferPool
    1M —— 27.741 GB/s 22.629 GB/s 18.177 GB/s
    2M —— 27.933 GB/s 22.637 GB/s 18.195 GB/s
    4M —— 28.166 GB/s 22.637 GB/s 18.108 GB/s
    8M —— 27.376 GB/s 22.624 GB/s 18.084 GB/s

    (2) READ

    传输内存块大小 HCCS D2D HCCS D2D BufferPool RDMA D2D RDMA D2D BufferPool
    1M 104.515 GB/s —— 22.604 GB/s ——
    2M 123.885 GB/s —— 22.612 GB/s ——
    4M 135.281 GB/s —— 22.612 GB/s ——
    8M 143.184 GB/s —— 22.612 GB/s ——
    传输内存块大小 HCCS H2D HCCS H2D BufferPool RDMA H2D RDMA H2D BufferPool
    1M 19.029 GB/s 28.223 GB/s 22.596 GB/s 18.022 GB/s
    2M 19.266 GB/s 26.864 GB/s 22.608 GB/s 18.140 GB/s
    4M 19.389 GB/s 28.782 GB/s 22.600 GB/s 18.200 GB/s
    8M 19.419 GB/s 30.428 GB/s 22.600 GB/s 17.035 GB/s
    传输内存块大小 HCCS D2H HCCS D2H BufferPool RDMA D2H RDMA D2H BufferPool
    1M —— 41.974 GB/s 22.579 GB/s 19.272 GB/s
    2M —— 42.445 GB/s 22.596 GB/s 19.332 GB/s
    4M —— 41.890 GB/s 22.604 GB/s 19.353 GB/s
    8M —— 41.377 GB/s 22.592 GB/s 19.216 GB/s
    传输内存块大小 HCCS H2H HCCS H2H BufferPool RDMA H2H RDMA H2H BufferPool
    1M —— 26.795 GB/s 17.199 GB/s 18.571 GB/s
    2M —— 25.025 GB/s 22.612 GB/s 18.783 GB/s
    4M —— 27.245 GB/s 22.616 GB/s 18.791 GB/s
    8M —— 29.274 GB/s 22.608 GB/s 18.679 GB/s