ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

MXNet 依赖静态构建与升级全指南:tools/dependencies 源码解析

2026/9/21 3:59:07 拓冰建站 浏览量
MXNet 依赖静态构建与升级全指南:tools/dependencies 源码解析 深度学习人工智能机器学习分布式训练【免费下载链接】mxnetLightweight, Portable, Flexible Distributed/Mobile Deep Learning with Dynamic, Mutation-aware Dataflow Dep Scheduler; for Python, R, Julia, Scala, Go, Javascript and more项目地址https://gitcode.com/gh_mirrors/mx/mxnet点击查看免费下载导读本指南围绕 Apache MXNet 仓库中的 tools/dependencies/README.md 展开系统讲解 MXNet 如何通过tools/dependencies目录下的构建脚本将所有第三方依赖BLAS、oneDNN、OpenCV、图像编解码库、网络库、序列化库等从源码编译为静态库并静态链接进libmxnet.so从而让 PyPI 包的用户开箱即用、无需自行安装底层依赖。读完本文你将掌握依赖分组与版本基线、构建入口tools/staticbuild/build.sh的完整调用链、CUDA/cuDNN/NCCL 的安装与升级流程以及各类依赖升级时的标准 sanity check 步骤与 FAQ 排障方法。一、为什么 MXNet 要从源码静态构建依赖MXNet 构建在大量第三方库之上BLAS 数学库、oneDNN CPU 性能加速库、CUDA/cuDNN/NCCL GPU 加速栈、OpenCV 图像处理库以及 S3 存储、PS-lite 参数服务器相关的网络与序列化组件。如果这些依赖各自动态链接用户在安装 PyPI 包后会面临版本冲突、链接库缺失等一系列环境地狱问题。tools/dependencies目录的存在就是为了解决这一问题这里的脚本负责把依赖从源码编译成静态库并通过静态链接把构建产物封装成自包含的libmxnet.so。这样用户只需要安装一个 Python 包就能同时获得这些依赖的能力而不需要关心它们来自哪里。从源码结构看这一目标由两层脚本协作完成tools/dependencies/make_shared_dependencies.sh集中调度所有依赖构建脚本的总入口负责按依赖顺序依次source各库的构建脚本tools/staticbuild/build_lib.sh将静态依赖目录staticdeps通过-DCMAKE_PREFIX_PATH/-DCMAKE_FIND_ROOT_PATH传给 CMake编译 MXNet 主库并产出lib/libmxnet.so。唯一的例外是 CUDA、cuDNN、NCCL 三件套——它们体积大、与硬件驱动强绑定要求用户在自己的环境中自行安装不纳入静态链接。二、依赖分组与版本基线原文档给出了 MXNet 当前使用的全部依赖及其版本基线。以下表格完整保留并标注了对应构建脚本文件均在 tools/dependencies/ 下方便你在升级时直接定位依赖版本分类对应脚本OpenBLAS0.3.9BLAS 库openblas.sh当前脚本内实际版本为 0.3.10oneDNN2.6CPU 性能加速——由 Intel 团队追踪维护CUDA10.1GPU 性能加速用户环境安装cuDNN7.5.1GPU 性能加速用户环境安装NCCL2.4.2GPU 性能加速用户环境安装numpy1.16.0,2.0.0Python 依赖numpy_mkl.sh仅 MKL 变体requests2.20.0,3.0.0Python 依赖——graphviz0.9.0,0.8.1Python 依赖——OpenCV3.4.2图像处理opencv.shzlib1.2.6图像/网络压缩libz.shlibjpeg-turbo2.0.2图像编解码libturbojpeg.sh当前脚本内实际版本为 2.0.4libpng1.6.35图像编解码libpng.shlibtiff4-0-10图像编解码libtiff.sh当前脚本内实际版本为 4.0.9eigen3.3.4线性代数头文件库eigen.shlibcurl7.61.0网络S3 相关curl.shlibssl-dev1.1.1b网络加密openssl.shzmq4.2.2通信PS-litezmq.shprotobuf3.5.1序列化protobuf.shlz4r130压缩lz4.shcityhash1.1.1哈希cityhash.sh需要说明的是表格中的版本是原文档记录的基线仓库当前实际脚本内的版本可能与表格略有出入如 OpenBLAS 0.3.10、libjpeg-turbo 2.0.4、libtiff 4.0.9。升级依赖时应以 tools/dependencies 下各脚本内声明的*_VERSION变量为准。2.1 依赖分组逻辑从原文档可以看出这些依赖可以归为四类每一类的升级维护路径都不同BLAS 库OpenBLAS / MKL决定矩阵运算底层实现直接影响训练与推理性能CPU 性能加速库oneDNN提供 CPU 上的卷积、池化等算子加速GPU 性能加速库CUDA、cuDNN、NCCL用户自行安装不静态链接其他OpenCV、numpy、S3 相关、PS-lite 依赖等静态链接进libmxnet.so。这一分类直接决定了后续各章节的升级流程差异。三、构建脚本总入口与环境变量3.1 两个核心环境变量所有构建脚本都依赖以下两个环境变量来控制行为环境变量含义取值DEPS_PATH依赖库被下载、编译、安装到的目录任意可写路径tools/staticbuild/build.sh默认设为仓库根目录下的staticdepsPLATFORM操作系统名称小写仅支持linux与darwin此外脚本要求构建工具链中已具备make、cmake、tar、unzip、autoconf、nasm。其中nasm是 libjpeg-turbo 在 x86 平台汇编优化所必需的macOS 上还要求在/usr/local/bin/nasm存在见 libturbojpeg.sh。3.2 make_shared_dependencies.sh调度顺序暗含依赖关系make_shared_dependencies.sh 是理解整个构建顺序的关键。它的调用序列如下# 非 darwin 且 BLAS 非 mkl 时才构建 OpenBLAS if [[ ! $PLATFORM darwin ]] [[ ! $BLAS mkl ]]; then source ${DIR}/openblas.sh fi source $DIR/libz.sh source $DIR/libturbojpeg.sh source $DIR/libpng.sh source $DIR/libtiff.sh source $DIR/openssl.sh source $DIR/curl.sh source $DIR/eigen.sh source $DIR/opencv.sh source $DIR/protobuf.sh source $DIR/cityhash.sh source $DIR/zmq.sh source $DIR/lz4.sh # 仅 MKL 变体构建 MKL 与 numpy 的 MKL 重链接 if [[ $BLAS mkl ]]; then source ${DIR}/mkl.sh source ${DIR}/numpy_mkl.sh ... fi从中可以读出几个关键设计OpenBLAS 与 MKL 二选一BLASmkl时跳过 OpenBLASBLASopen默认时构建 OpenBLAS。macOS 上总是使用系统 Accelerate/其他 BLAS因此也跳过 OpenBLAS图像栈严格有序zlib → libjpeg-turbo → libpng → libtiff → eigen → OpenCV。OpenCV 编译时要用到前面构建的 JPEG/PNG/TIFF/eigen 头文件与静态库opencv.sh 顶部注释明确说明它期望 openblas、libjpeg、libpng、libtiff、eigen 等已经位于$DEPS_PATH网络/序列化栈openssl → curl → protobuf → cityhash → zmq → lz4脚本末尾统一导出链接路径通过find定位 protobuf 生成的libprotoc*所在目录连同$DEPS_PATH/lib、$DEPS_PATH/lib64一起追加到LIBRARY_PATH与LD_LIBRARY_PATH确保后续编译 MXNet 主库时能正确找到这些静态/动态库。3.3 统一的 download 函数与幂等性设计每个脚本头部都会调用make_shared_dependencies.sh中定义的download函数其显著特点是重试与幂等download () { local URL$1 local OUT_FILE$2 if [[ -f ${OUT_FILE} ]]; then echo File ${OUT_FILE} already downloaded. return 0 fi local CURL_OPTIONS--connect-timeout 60 \ --max-time 300 \ --retry-delay 30 \ --retry 5 \ --location \ --silent curl ${CURL_OPTIONS} ${URL} -o ${OUT_FILE} ... }已存在的文件直接跳过下载支持断点续传式复用每次下载带 60 秒连接超时、300 秒总超时、最多 5 次重试、30 秒重试间隔并跟随重定向--location。与之配套几乎每个库的构建都带有存在性检查例如 libz.sh 中if [[ ! -f $DEPS_PATH/lib/libz.a ]]、openblas.sh 中if [[ (! -e $DEPS_PATH/lib/libopenblas.a) ]]。这意味着构建过程天然支持增量某个库已构建成功就跳过只有缺失的库才会重新编译非常适合 CI 环境复用staticdeps目录。四、构建工具链与 FAQ4.1 gcc/g/gfortran 版本一致性构建失败gcc、g、gfortran目前 MXNet 静态依赖构建仅官方支持gcc-4.8。如果选择更高版本请务必保证gcc、g、gfortran三者版本一致否则会出现链接阶段的 ABI 不匹配错误。这一要求在 tools/staticbuild/build.sh 中有直接体现export CCgcc export CXXg export FCgfortran export CFLAGS${CFLAGS:${CFLAGS}} -fPIC -mno-avx export CXXFLAGS${CXXFLAGS:${CXXFLAGS}} -fPIC -mno-avx注意这里的-fPIC与-mno-avx-fPIC是静态库被链接进共享对象libmxnet.so所必需的地址无关代码标志-mno-avx则用于保证最终产物在更广泛的旧 CPU 上可运行。OpenBLAS 编译时同样通过CFLAGS-fPIC CXXFLAGS-fPIC注入该标志见 openblas.sh。4.2 idn2 not foundmacOS/Xcode 8.0idn2 not found此问题出现在 Xcode 8.0 以上版本的 OSX 构建中在 9.2 上可复现。解决办法是如果你的 Xcode 版本高于 8.0请在 curl.sh 的 configure 参数中增加--without-libidn2这是 libcurl 与新版 macOS 系统库中 libidn2 相关符号不兼容导致的链接问题禁用该模块即可绕过。4.3 前置软件安装Ubuntu升级任何依赖前先确保构建机具备完整工具链。以下为原文档给出的 Ubuntu 环境前置安装命令适用于 Ubuntu 16.04 等 apt 系发行版sudo apt update sudo apt-get install -y git \ cmake \ libcurl4-openssl-dev \ unzip \ gcc-4.8 \ g-4.8 \ gfortran \ gfortran-4.8 \ binutils \ nasm \ libtool \ curl \ wget \ sudo \ gnupg \ gnupg2 \ gnupg-agent \ pandoc \ python3-pip \ automake \ pkg-config此外若使用 tools/staticbuild/build.sh 构建还需先安装patchelfUbuntu 上为apt install patchelf因为 openblas.sh 会调用patchelf --set-rpath $ORIGIN --force-rpath libopenblas.so为 OpenBLAS 动态库设置自引用 rpath。五、静态构建全流程从依赖到 libmxnet.so5.1 一键构建入口 build.sh原文档和 tools/staticbuild/README.md 都指出日常使用请直接运行仓库根目录下的一键脚本tools/staticbuild/build.sh cu100mkl # CUDA 10.0 MKL 变体 tools/staticbuild/build.sh mkl # CPU MKL 变体 tools/staticbuild/build.sh cpu # CPU oneDNNBLAS 默认 open tools/staticbuild/build.sh cu112 # CUDA 11.2 变体build.sh的用法为build.sh VARIANT BLASBLAS 可省略默认open。它会自动完成以下环境准备见 tools/staticbuild/build.shexport CURDIR$PWD export DEPS_PATH$PWD/staticdeps # 依赖统一落在 staticdeps export VARIANT$(echo $1 | tr [:upper:] [:lower:]) export PLATFORM$(uname | tr [:upper:] [:lower:]) export BLAS$(echo $2 | tr [:upper:] [:lower:]) # 缺省为 open export NUM_PROC$(nproc) # 自动探测 CPU 核数用于并行编译 export MAKEmake --quiet -j $NUM_PROC随后依次执行source tools/dependencies/make_shared_dependencies.sh——编译全部静态依赖到staticdeps拷贝 tools/dependencies/LICENSE.binary.dependencies、NOTICE、LICENSE到licenses/保证二进制分发合规source tools/staticbuild/build_lib.sh——编译 MXNet 主库。整个流程约需 10~30 分钟最终在仓库根目录lib/下产出静态链接的libmxnet.so同时staticdeps/中保留全部依赖构建产物。5.2 变体与 cmake 配置的对应关系VARIANT决定选用哪个 CMake 配置文件。从 build_lib.sh 的取值逻辑看if [[ ! $BLAS ]] || [[ $BLAS open ]]; then cmake_config${CURDIR}/config/distribution/${PLATFORM}_${VARIANT}.cmake else cmake_config${CURDIR}/config/distribution/${PLATFORM}_${VARIANT}_${BLAS}.cmake fi即linux_cu112.cmake、linux_cpu_mkl.cmake这类文件。当前仓库 config/distribution 下支持的组合有CPU 系列linux_cpu.cmake、linux_native.cmakenative 为当前机器微架构优化两者均启用 oneDNN 后端MKL 系列linux_cpu_mkl.cmake、darwin_cpu_mkl.cmakeCUDA 系列linux_cu92.cmake、linux_cu100.cmake、linux_cu101.cmake、linux_cu102.cmake、linux_cu110.cmake、linux_cu112.cmakeDarwin 系列darwin_cpu.cmake、darwin_native.cmake。构建命令会随变体自动匹配例如build.sh cu100mkl会解析为VARIANTcu100、BLASmkl进而使用linux_cu100_mkl.cmake对应的路径。5.3 静态链接的关键 CMake 参数build_lib.sh 在配置阶段注入两个关键参数cmake -GNinja -C $cmake_config \ -DCMAKE_PREFIX_PATH${DEPS_PATH} \ -DCMAKE_FIND_ROOT_PATH${DEPS_PATH} \ ...CMAKE_PREFIX_PATH告诉 CMake 去staticdeps中查找依赖的 include 与 libCMAKE_FIND_ROOT_PATH将查找范围锁定在staticdeps内防止链接到系统库这是实现完全静态自包含的核心手段。构建完成后脚本还会用readelf -d/otool -L检查libmxnet.so的链接对象并用strip --strip-unneeded精简符号减小产物体积。5.4 安装 Python 前端并做冒烟测试pip install -e python随后验证 import mxnet as mx mx.runtime.feature_list()feature_list()会输出当前libmxnet.so编译时启用的功能列表是验证依赖是否正确静态链接进来的最直接手段。六、GPU 依赖升级CUDA / cuDNN / NCCL这三者是唯一用户自装的依赖。原文档以 CUDA 10.0 / cuDNN 7.5.0 / NCCL 2.4.2 为例给出完整流程升级时可按需替换版本号。6.1 环境安装CUDA 10.0交互式安装按提示选择# 依据 https://developer.nvidia.com/cuda-downloads 的指引 # 安装 NVIDIA Accelerated Graphics Driver for Linux-x86_64 410.48? # (y)es/(n)o/(q)uit: y # 安装 OpenGL libraries?默认 yes按需选择 # 运行 nvidia-xconfig?默认 no多 GPU 厂商的定制 X 配置机器不要开 # 安装 CUDA 10.0 Toolkit? (y)es/(n)o/(q)uit: y # Enter Toolkit Location [ default is /usr/local/cuda-10.0 ]: # 安装 symbolic link at /usr/local/cuda? (y)es/(n)o/(q)uit: y # 安装 CUDA 10.0 Samples? (y)es/(n)o/(q)uit: n # 设置动态库路径 export LD_LIBRARY_PATH/usr/local/cuda/lib64:${LD_LIBRARY_PATH} # 验证安装 nvidia-smicuDNN 7.5.0需注册 NVIDIA 账号下载cudnn-10.0-linux-x64-v7.5.0.56.tgz后拷贝到实例tar -xvzf cudnn-10.0-linux-x64-v7.5.0.56.tgz sudo cp cuda/include/cudnn.h /usr/local/cuda/include sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64 sudo chmod ar /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn* # 检查 cuDNN 版本 cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2 # #define CUDNN_MAJOR 7 # #define CUDNN_MINOR 5 # #define CUDNN_PATCHLEVEL 0NCCL 2.4.2下载nccl-repo-ubuntu1604-2.4.2-ga-cuda10.0_1-1_amd64.debsudo dpkg -i nccl-repo-ubuntu1604-2.4.2-ga-cuda10.0_1-1_amd64.deb sudo apt-key add /var/nccl-repo-2.4.2-ga-cuda10.0/7fa2af80.pub sudo apt update sudo apt install libnccl2 libnccl-dev6.2 构建与版本验证git clone --recursive MXNet 仓库地址 cd mxnet # 为公平的性能对比建议 pin 到具体 commit # 升级 CUDA 版本时需修改 tools/setup_gpu_build_tools.sh # 参考 PR #14887 的做法同步更新 CUDA 对应的 makefile 与 deb 下载地址 # 构建 PyPi 包CUDA 10.0 MKL 变体 tools/staticbuild/build.sh cu100mkl # 等待 10-30 分钟后在 mxnet/lib 下找到 libmxnet.so # 安装 Python 前端 pip install -e python # 验证 import mxnet as mx mx.runtime.feature_list()验证 NCCL 版本利用 NCCL 自带的调试输出开关并运行 MXNet 的 NCCL 测试用例export NCCL_DEBUGVERSION # 编辑 tests/python/gpu/test_nccl.py去掉 # unittest.skip(Test requires NCCL library installed and enabled during build) # 然后运行 pytest --verbose tests/python/gpu/test_nccl.py预期输出中会出现NCCL version 2.4.2cuda10.0表明当前构建链接的 NCCL 版本正确。该测试文件位于 tests/python/gpu/test_nccl.py。6.3 性能回检、PR 与 CI性能 sanity check提 PR 前必须对构建出的 MXNet 跑性能测试与基线版本对比提交 PR 更新更新tools/setup_gpu_build_tools.sh参考 PR #14988、#14887可选更新 CI 相关配置、shell 脚本与 Dockerfile参考 PR #14986、#14950CI 验证项目 CI 会针对最新 CUDA 版本如mxnet-cu101mkl测试 PyPi 与 Scala 的发布流程确保新的 GPU 依赖组合可以顺利走完发布链路。七、Python 依赖升级numpy / requests / graphviz原文档强调更新 Python 依赖时版本约束必须同时给出上界和下界避免未来不兼容的大版本破坏已发布包。当前仓库中三处关键声明可作为核对清单python/setup.pyinstall_requires[numpy1.17, requests2.20.0,3, graphviz0.9.0,0.8.1, ...]tools/pip/setup.pyDEPENDENCIES [numpy2.0.0,1.16.0, requests2.20.0,3, graphviz0.9.0,0.8.1, ...]即 PyPi 发布包的依赖声明ci/docker/install/requirementsCI 镜像内的numpy1.17,1.20.0、requests2.20.0,3、graphviz0.9.0,0.8.1。7.1 完整 Checklist升级 Python 依赖时原文档给出的检查清单仓库路径已按当前结构核对包括python/setup.pytools/pip/setup.pyci/docker/install/requirementsCI 的 ubuntu python 安装脚本对应 ci/docker/install 目录CI 的 mxnet_requirements.txt对应 ci/docker/install/requirements文档安装依赖 requirements.txt对应 docs/python_docs/requirements7.2 冒烟测试# 编译 mxnet 得到 libmxnet.so pip install -e python python import mxnet as mx mx.nd.ones((1, 2)) [[1. 1.]] NDArray 1x2 cpu(0)八、OpenCV 及其依赖栈升级OpenCV 的依赖栈包括 zlib、libjpeg-turbo、libpng、libtiff、eigen。升级时需遵循先底层后上层的顺序。8.1 更新构建脚本在 tools/dependencies 下找到对应库的脚本并更新版本号例如libz.sh 中的ZLIB_VERSION1.2.6libturbojpeg.sh 中的TURBO_JPEG_VERSION2.0.4libpng.sh 中的PNG_VERSION1.6.35libtiff.sh 中的TIFF_VERSION4.0.9eigen.sh 中的EIGEN_VERSION3.3.4opencv.sh 中的OPENCV_VERSION3.4.28.2 OpenCV 静态编译的关键裁剪从 opencv.sh 可以看到OpenCV 的静态构建做了大量裁剪以减小体积仅开启WITH_JPEGON、WITH_PNGON、WITH_TIFFON、WITH_EIGENON、WITH_LAPACKON其余几十个模块CUDA、OpenCL、FFmpeg、GTK、TBB、VTK、WebP、视频相关等全部关闭BUILD_SHARED_LIBSOFF强制静态仅构建BUILD_opencv_highguiON与BUILD_opencv_imgprocimgcodecs 由 lib 存在性检查libopencv_core.a、libopencv_imgcodecs.a、libopencv_imgproc.a体现其余 module 全部关闭CMAKE_LIBRARY_PATH/CMAKE_INCLUDE_PATH指向$DEPS_PATH确保复用前面构建的 zlib、jpeg、png、tiff、eigenLinux 下BLASopen时通过OPENCV_LAPACK_OPTIONS把 LAPACK 实现指向 OpenBLAS 的静态库-D LAPACK_LIBRARIES$DEPS_PATH/lib/libopenblas.a构建完成后补一个兼容头把imgcodecs_c.h内容追加到imgcodecs.hpp并安装 OpenBLAS 时使用patchelf设置$ORIGINrpath。8.3 Sanity Check# 更新 tools/dependencies 下的依赖版本后 tools/staticbuild/build.sh mkl # 等待 10-30 分钟在 mxnet/lib 下找到 libmxnet.so pip install -e python # 验证 import mxnet as mx mx.runtime.feature_list()随后针对图像相关任务如图像分类、目标检测的数据加载与预处理运行性能测试确认 OpenCV 栈升级没有引入回归。九、其他依赖升级网络 / 序列化 / 压缩栈tools/dependencies下其余脚本覆盖的库包括脚本库版本变量构建要点openssl.shOpenSSLOPENSSL_VERSION1.1.1b./Configure no-shared no-zlibLinux 用linux-x86_64macOS 用darwin64-x86_64-cc目标curl.shlibcurlLIBCURL_VERSION7.61.0--enable-sharedno仅保留 HTTP/IPv6macOS 用--with-darwinsslprotobuf.shprotobuf protocPROTOBUF_VERSION3.5.1./autogen.sh ./configure -prefix$DEPS_PATH产物为libprotobuf/libprotoczmq.shZeroMQZEROMQ_VERSION4.2.2PS-lite 通信底层lz4.shlz4LZ4_VERSIONr130压缩cityhash.shcityhashCITYHASH_VERSION1.1.1哈希升级流程与 OpenCV 栈完全一致更新构建脚本在tools/dependencies下找到对应库更新版本号Sanity Check# 前置软件安装Ubuntu 16.04 为例命令同第 4.3 节 # 更新依赖后 tools/staticbuild/build.sh mkl pip install -e python import mxnet as mx mx.runtime.feature_list()若改动涉及 PS-lite / 分布式训练路径建议额外跑一轮分布式或 KVStore 相关测试如 tests/python 下的 kvstore 用例。十、为什么静态链接让用户受益回到开篇的问题把这么多依赖静态链接进libmxnet.so对最终用户意味着什么零环境负担安装 PyPi 包后无需再手动安装 OpenBLAS、OpenCV、libcurl 等底层库import mxnet即可获得完整能力版本可控所有依赖版本由 MXNet 发行方统一锁定见第二节版本表避免与用户机器上的系统库版本冲突二进制合规构建时自动拷贝LICENSE.binary.dependencies、NOTICE、LICENSE到licenses/见 tools/staticbuild/build.sh满足各依赖的开源许可证分发要求。同时也要清楚其代价静态链接会增大libmxnet.so体积且升级任何依赖都需要重新完整构建并走一遍本指南的 sanity check 流程——这正是原文档编写这份 Dependency Update Runbook 的初衷把易错、繁琐的依赖升级流程标准化、清单化。附升级一次依赖的标准动作清单在 tools/dependencies 对应脚本中更新*_VERSIONGPU 相关改动同步更新tools/setup_gpu_build_tools.sh与 CMake 配置 config/distributionPython 依赖改动按第七章 Checklist 逐项核对python/setup.py、tools/pip/setup.py、CI requirements运行tools/staticbuild/build.sh variant [blas]完成全量构建pip install -e python后执行mx.runtime.feature_list()冒烟测试针对受影响功能跑性能 sanity checkGPU 依赖跑 NCCL 测试、图像栈跑图像任务确认无误后提 PR由 CI 对最新 CUDA 版本执行 PyPi / Scala 发布链路验证。赞分享深度学习人工智能机器学习分布式训练【免费下载链接】mxnetLightweight, Portable, Flexible Distributed/Mobile Deep Learning with Dynamic, Mutation-aware Dataflow Dep Scheduler; for Python, R, Julia, Scala, Go, Javascript and more项目地址https://gitcode.com/gh_mirrors/mx/mxnet点击查看免费下载相关推荐在电脑上重温任天堂3DS游戏Citra模拟器深度体验指南在电脑上重温任天堂3DS游戏Citra模拟器深度体验指南 想要在个人电脑上畅玩《精灵宝可梦》、《塞尔达传说》等经典的任天堂3DS游戏吗Citra模拟器为你打开发工具代码生成CLI解决DLL依赖难题Dependencies项目从构建到生态集成全指南解决DLL依赖难题Dependencies项目从构建到生态集成全指南 你是否还在为Windows应用开发中的DLL依赖问题头疼启动程序时频繁遇到缺少xxx开发工具桌面应用逆向工程RustDesk 构建完全指南从依赖安装到 Docker 构建与源码结构解析RustDesk 构建完全指南从依赖安装到 Docker 构建与源码结构解析 RustDesk 是一款用 Rust 编写的开源远程桌面软件可自托管部署作为音视频通信网络上一篇multipleWindow3dScene简单五步开始教程下一篇如何快速掌握fastai自定义层从零开始的神经网络层开发完整指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考