完成作业1-4,集成NVIDIA CUDA、沐曦 MXMACA - #63
Open
wnyxvo wants to merge 8 commits into
Open
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
作业 #4 完成报告:NVIDIA、天数智芯与沐曦平台集成
1. 完成结论
本作业要求在框架中集成至少两类 CUDA-like 加速平台。本项目已完成 NVIDIA CUDA、天数智芯 CoreX 和沐曦 MXMACA 三套后端的接入,覆盖设备运行时、基础算子、Python 设备选择和 Qwen2 推理调用链。
三套后端彼此独立:平台相关的 Runtime、资源管理和 Kernel 分别位于各自目录中,不依赖其他 GPU 后端的实现。编译时一次只选择一个 GPU 后端,最终都通过统一的
llaisysC API 和 Python API 对外提供能力。--nv-gpu=ynvidia--iluvatar-gpu=yiluvatar--metax-gpu=ymetax2. 后端隔离与统一接口
平台代码按目录分离:
公共层只负责设备枚举和分发:
LLAISYS_DEVICE_NVIDIA、LLAISYS_DEVICE_ILUVATAR、LLAISYS_DEVICE_METAX。DeviceType.NVIDIA、DeviceType.ILUVATAR、DeviceType.METAX。xmake.lua约束一次构建只启用一个 GPU 后端,避免多个平台工具链和运行库相互污染。因此,天数智芯和沐曦后端不会复用或依赖 NVIDIA Kernel;三者只共享框架的公共接口定义。
3. 已完成的实现
3.1 NVIDIA CUDA 后端
NVIDIA 后端实现位于
src/device/nvidia/、src/ops/*/nvidia/和xmake/nvidia.lua,完成内容如下:cudaMemcpy,支持 Host/Device 方向转换。add、argmax、embedding、linear、rms_norm、rope、self_attention、swiglu。F32、F16和BF16;linear使用cublasGemmEx并采用 FP32 累加。cublas,默认针对本机 GPU 架构生成代码。--device nvidia,Qwen2 可通过统一接口运行在 NVIDIA 设备上。3.2 天数智芯 CoreX 后端
天数智芯实现位于
src/device/iluvatar/、src/ops/*/iluvatar/和xmake/iluvatar.lua:cuinfer,并通过平台资源管理层维护 Handle 与 Stream。iluvatar设备选择。3.3 沐曦 MXMACA 后端
沐曦实现位于
src/device/metax/、src/ops/*/metax/和xmake/metax.lua:mcblas,并通过平台资源管理层维护 Handle 与 Stream。metax设备选择。4. NVIDIA 环境完整复现步骤
以下步骤适用于当前 NVIDIA 环境,命令均从项目根目录执行。
4.1 检查基础环境
cd /data/llaisys nvidia-smi nvcc --version xmake --version python --version应能识别 NVIDIA 驱动、CUDA Toolkit、Xmake 和 Python。若项目实际位于其他目录,只需将
/data/llaisys替换为实际路径。4.2 清理并配置 NVIDIA 构建
-c会清除旧的 Xmake 配置缓存,避免此前选择的天数智芯或沐曦工具链残留。配置结果中应启用 NVIDIA 后端,且不应同时启用另外两个 GPU 后端。4.3 编译并安装 C++ 动态库
编译完成后,核心产物为:
4.4 重新安装 Python 包
这一步必须在
xmake install之后执行,否则 Python 可能继续加载site-packages中旧版本的libllaisys.so,从而出现“代码已经修改,但运行时仍报告旧符号缺失”的问题。可用以下命令确认实际加载位置:
4.5 Runtime 复现
该命令覆盖设备发现、设备切换、流管理、内存分配、同步拷贝和异步拷贝等 Runtime 路径。
4.6 算子复现
该循环依次验证本作业要求的 8 个算子。若需要定位单个算子,可直接运行对应脚本,例如:
4.7 Qwen2 推理复现
python test/test_infer.py \ --model /path/to/DeepSeek-R1-Distill-Qwen-1.5B \ --test \ --device nvidia将模型路径替换为本机实际路径。该命令用于验证从 Python、模型层、Tensor/Runtime 到 NVIDIA 算子的完整调用链。
5. 天数智芯 CoreX 复现步骤
如 CoreX 安装路径不同,应将
COREX_ROOT修改为目标机器的实际 SDK 路径。6. 沐曦 MXMACA 复现步骤
如 MXMACA 安装路径不同,应将
MACA_PATH修改为目标机器的实际 SDK 路径。7. 验收与故障排查
7.1 推荐验收顺序
建议按以下顺序验收,每一步通过后再进入下一步:
xmake f能识别所选平台工具链和 SDK。xmake能生成libllaisys.so,加载时不存在未定义符号。7.2 动态库未定义符号
若导入 Python 包时出现类似下面的错误:
先确认已使用对应平台重新配置并完整编译,再执行:
xmake clean xmake f -c --nv-gpu=y -cv # 按目标平台替换此选项 xmake xmake install python -m pip install --force-reinstall --no-cache-dir --no-deps ./python随后通过
llaisys.__file__和LIB_LLAISYS._name检查 Python 包及动态库是否仍在加载旧安装。7.3 多后端切换
从一个 GPU 平台切换到另一个平台时必须重新执行
xmake clean和xmake f -c。不要在同一次构建中同时设置--nv-gpu=y、--iluvatar-gpu=y或--metax-gpu=y。8. 运行日志
NVIDIA CUDA
MXMACA
9. 提交内容总结