ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

llm.c 没有本地 GPU 时如何用 Modal 平台跑 CUDA kernel 基准测试?

llm.c 没有本地 GPU 时如何用 Modal 平台跑 CUDA kernel 基准测试? llm.c 没有本地 GPU 时如何用 Modal 平台跑 CUDA kernel 基准测试【免费下载链接】llm.cLLM training in simple, raw C/CUDA项目地址: https://gitcode.com/GitHub_Trending/ll/llm.cllm.c 的 dev/cuda 目录为每个网络层手写了一组 CUDA kernel并用基准测试程序对比多个版本的正确性与耗时。目录里的 README 明确写道如果你本地没有 GPUIf you do not have a GPU or is having trouble with CUDA dependencies可以把这些基准测试放到 Modal 平台上运行。这篇文章讲的就是这条路径在云端 GPU 上编译一个 kernel 文件、运行指定版本、拿到正确性对比和计时输出以 attention forward 为例走一遍完整命令。dev/cuda 的基准测试程序输出什么理解输出有助于判断一次远端运行是否成功。dev/cuda 的 README 描述了这类程序的工作方式每个.cu文件对应一个 kernel通常包含多个版本一般按复杂度递增、耗时递减排列编译方式写在每个文件的头部注释里也可以直接用目录里的 Makefile例如 LayerNorm 前向nvcc -O3 --use_fast_math -lcublas -lcublasLt layernorm_forward.cu -o layernorm_forward运行./layernorm_forward 1时程序会先在 CPU 上跑参考代码然后在 GPU 上跑 kernel 1对比两者结果以检查正确性接着对该 kernel 的多种启动配置最常见的是 block size逐一计时。所以一次成功运行的判定标准是程序自带的GPU 结果与 CPU 参考对比通过并打印各配置下的计时。dev/cuda README 用更快的 kernel 4 举例说明输出会 matches all the CPU results but runs much much faster匹配所有 CPU 结果但快得多。准备工作按 dev/cuda/benchmark_on_modal.py 的代码需要准备三样东西modal CLI。文档给出的所有命令都以modal run开头项目文档不覆盖 Modal 自身的安装与登录这部分需要你在运行前自行完成。在dev/cuda目录下执行命令。脚本用modal.Mount.from_local_dir(./, remote_path/root/)把当前目录整个上传到容器的/root/而编译命令直接以文件名引用源码如attention_forward.cu因此当前目录必须是dev/cuda。一个名为cuda-env的 Modal volume。脚本无条件引用modal.Volume.from_name(cuda-env)代码注释说明 volume 通过modal volume create {volume-name}创建。使用默认名时执行modal volume create cuda-env或者把脚本里的 volume 名改成你自己创建的。这个 volume 的用途是存放 nsight profiling 报告纯 kernel 基准测试只依赖它存在。容器镜像在脚本中是写死的totallyvyom/cuda-env:latest-2构建步骤里预装了 cuDNN、OpenMPI、cudnn-frontend 和 nsight-systems-2023.3.3因此 CUDA 工具链不需要你本地准备。你通过环境变量控制的只有 GPU 选择。在 Modal 上跑 attention forward 基准测试dev/cuda README 给出的官方示例在 80GB 显存的 A100 上编译并运行 attention forward 的 version 1GPU_MEM80 modal run benchmark_on_modal.py \ --compile-command nvcc -O3 --use_fast_math attention_forward.cu -o attention_forward -lcublas \ --run-command ./attention_forward 1两个参数就是容器内按顺序执行的两条命令--compile-command是编译命令--run-command是编译完成后的运行命令。环境变量含义来自脚本内os.environ.get的默认值GPU_MEMGPU 显存GB默认40写成80即请求 80GB 规格的卡。GPU_NAME可选GPU 型号默认A100脚本支持且仅支持H100、A100、A10G三个取值其他名字会在GPU_NAME_TO_MODAL_CLASS_MAP里直接报错。N_GPUS可选GPU 数量默认1。运行结束后的判断方式与本地一致二进制的输出里包含 GPU 与 CPU 参考结果的对比以及各启动配置的计时。想比较同一 kernel 的其他版本改--run-command里的版本编号即可例如attention_forward.cu头部注释列出的 version 1朴素实现、3cuBLAS softmax文档称比 version 1 快约 20 倍、4、5、10cuDNN Flash Attention等。换成其他 kernel 来测换 kernel 只需替换编译命令和运行命令Modal 部分不变kernel 清单见 Makefile 的TARGETSadamw、attention_backward、attention_forward、classifier_fused、crossentropy_forward、crossentropy_softmax_backward、encoder_forward、gelu_forward、layernorm_forward、matmul_forward、softmax_forward等编译命令从对应.cu文件头部注释取与 Makefile 一致。例如 layernorm_forward.cu 头部GPU_MEM80 modal run benchmark_on_modal.py \ --compile-command nvcc -O3 --use_fast_math -lcublas -lcublasLt layernorm_forward.cu -o layernorm_forward \ --run-command ./layernorm_forward 1上面这条是把文档中已有的编译命令套进 Modal 命令的示例。layernorm 共 5 个版本./layernorm_forward 1到5文件头部注释说明了每个版本的算法差异。可选分支nsys profiling 与报告下载同一个脚本也支持 nsight systems profiling。docstring 给出的示例是远端编译并训练 GPT-2注意该示例从仓库根目录执行路径写法不同GPU_MEM80 modal run dev/cuda/benchmark_on_modal.py \ --compile-command make train_gpt2cu USE_CUDNN1 \ --run-command nsys profile --cuda-graph-tracegraph --python-backtracecuda --cuda-memory-usagetrue ./train_gpt2cu -i dev/data/tinyshakespeare/tiny_shakespeare_train.bin -j dev/data/tinyshakespeare/tiny_shakespeare_val.bin -v 250 -s 250 -g 144 -f shakespeare.log -b 4报告中说明了一个已知现象nsys profiling 在命令行会产生 unrecognized GPU UUID 错误但它不影响训练与验证报告文件仍会正常生成。容器内的run_benchmark函数在命令执行完会把report1.nsys-rep、report1.qdstrm移动到 volume 中一个名为report1_{timestamp}的目录时间戳由容器生成随后在本地用代码注释给出的方式下载modal volume get cuda-env report1_{timestamp}把{timestamp}替换为容器输出中实际生成的目录名。限制与注意GPU 型号只限于H100/A100/A10G镜像totallyvyom/cuda-env:latest-2在脚本中写死更换镜像或 GPU 需要修改 dev/cuda/benchmark_on_modal.py。run_benchmark会无条件执行移动 nsys 报告的mv命令。如果你没做 profiling这几条mv会失败但execute_command不检查子进程返回码因此不影响基准测试的编译、运行和输出。个别 kernel 版本需要额外编译参数例如attention_forward.cu启用 cuDNN 的路径需要-I/PATH/TO/cudnn-frontend/include -DENABLE_CUDNN ... -lcudnn文档没有给出这些路径在 Modal 上的现成示例按文件头部注释调整--compile-command时请自行核对头文件路径。反过来如果你本地就有 GPU不需要走 Modaldev/cuda README 说明直接make layernorm_forward之类的 Make 目标即可编译运行。【免费下载链接】llm.cLLM training in simple, raw C/CUDA项目地址: https://gitcode.com/GitHub_Trending/ll/llm.c创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表