ARTICLE DETAIL

资讯详情

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

DLAP221 上跑通 Demo 程序:从编译到运行的完整配置记录

DLAP221 上跑通 Demo 程序:从编译到运行的完整配置记录 1. DLAP221 上跑 Demo 程序到底难在哪从零到一的编译运行全景DLAP221 开发板上跑通 Demo 程序是很多嵌入式开发者拿到板子后的第一个目标。DLAP221 是一款面向边缘 AI 推理的开发板内置 Ascend 系列 NPU支持 Caffe、TensorFlow 等框架转换后的 om 模型推理。它能做什么简单说你可以把训练好的模型部署到板子上实现图片分类、目标检测、视频解码等推理任务。适合谁适合刚接触 AscendCL 编程、需要在边缘设备上验证模型效果的嵌入式开发者。但第一次上手坑不少。编译脚本找不到头文件、cmake 报环境变量缺失、运行时报设备打开失败、sudo 权限被拒……这些问题在官方文档里往往一笔带过实际踩起来却要花大半天。我试过在 DLAP221 上从零编译运行 Demo整个过程涉及交叉编译工具链配置、CMakeLists.txt 参数调整、模型转换、烧录验证等多个环节每一步都有细节需要注意。这篇文章会带你走完整个流程从环境变量设置、cmake 生成编译文件、make 编译链接到最终运行 Demo 并看到推理结果输出。我会给出完整的命令、关键参数说明以及运行成功后的日志片段作为验证依据。你不需要有 AscendCL 编程经验只要会基本的 Linux 命令操作就能跟着做下来。核心检索词DLAP221 Demo 程序编译运行、AscendCL 样例编译、DLAP221 开发板推理验证。全文围绕这三个关键词展开覆盖从环境准备到结果验证的完整链路。2. 动手前的环境准备DLAP221 开发环境与 TaoToken 配置在开始编译 Demo 之前需要先确认开发环境是否就绪。DLAP221 的开发环境通常有两种使用方式一种是在 PC 上通过 MindStudio 进行交叉编译另一种是直接在设备端编译运行。本文聚焦设备端直接编译的方式因为这种方式更直观适合首次接触该平台的开发者快速验证。设备端的开发环境默认安装在/home/HwHiAiUser/Ascend/ascend-toolkit/latest目录下。Demo 程序位于/home/HwHiAiUser/Samples/demos分为三类acl_execute_model模型推理样例、classification图片分类、objectdetection目标检测。每个 Demo 的编译脚本src/CMakeLists.txt通过环境变量来定位头文件和库文件路径。这里有一个关键点编译脚本中已默认设置了头文件路径/usr/local/Ascend/acllib/include/和库文件路径/usr/local/Ascend/acllib/lib64/stub/。但如果你设置了DDK_PATH和NPU_HOST_LIB环境变量编译脚本会优先使用环境变量指向的路径。设备端默认已经在~/.bashrc中配置好了这两个变量export DDK_PATH/home/HwHiAiUser/Ascend/ascend-toolkit/latest export NPU_HOST_LIB/home/HwHiAiUser/Ascend/ascend-toolkit/latest/acllib/lib64/stub你可以用echo $DDK_PATH确认是否已生效。如果没有输出手动执行source ~/.bashrc或直接在终端 export 一次。接下来是 TaoToken 的配置。TaoToken 是一个大模型 API 聚合平台在嵌入式 AI 开发中你可以用它来调用云端模型做对比验证或者在本地模型推理效果不理想时快速切换云端模型做效果对照。它的 API 地址是https://taotoken.net/api官网是https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content。配置方式很简单在终端设置环境变量即可export TAOTOKEN_API_KEY你的API Key export TAOTOKEN_BASE_URLhttps://taotoken.net/api如果你使用 Claude Code 或 Cline 这类编码工具可以在对应的配置文件中填入 Base URL 和 API Key。比如 Claude Code 的 settings.json{ env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_API_KEY: 你的API Key } }Cline MCP 的配置类似在 MCP 设置中填入 Base URL 和 Key 即可。Codex 的 auth.json 配置{ base_url: https://taotoken.net/api, api_key: 你的API Key }模型 ID 根据你使用的模型填写比如claude-sonnet-4-20250514或gpt-4o。配置完成后你可以通过模型对话页面快速验证 Key 是否有效访问https://taotoken.net/api-keys管理你的 Key访问https://taotoken.net/doc查看接入文档。环境准备好之后就可以进入编译环节了。3. 可复制的编译配置CMakeLists.txt 关键参数与 cmake 命令编译 Demo 程序的核心步骤是进入build/intermediates/host目录执行 cmake 生成 Makefile然后 make 编译。以acl_execute_model/acl_dvpp_resnet50为例完整命令如下cd ~/Samples/demos/acl_execute_model/acl_dvpp_resnet50 cd build/intermediates/host/ cmake ../../../src -DCMAKE_SKIP_RPATHTRUE make这里的../../../src表示 CMakeLists.txt 文件所在的目录你需要根据实际目录层级调整。-DCMAKE_SKIP_RPATHTRUE是跳过 RPATH 设置避免运行时找不到动态库。cmake 执行成功后你会看到类似下面的输出-- The C compiler identification is GNU 7.5.0 -- The CXX compiler identification is GNU 7.5.0 -- Check for working C compiler: /usr/bin/cc -- Check for working C compiler: /usr/bin/cc -- works -- Detecting C compiler ABI info -- Detecting C compiler ABI info - done -- Check for working CXX compiler: /usr/bin/c -- Check for working CXX compiler: /usr/bin/c -- works -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done -- env INC_PATH: /home/HwHiAiUser/Ascend/ascend-toolkit/latest -- env LIB_PATH: /home/HwHiAiUser/Ascend/ascend-toolkit/latest/acllib/lib64/stub -- Configuring done -- Generating done -- Build files have been written to: /home/HwHiAiUser/Samples/demos/acl_execute_model/acl_dvpp_resnet50/build/intermediates/host注意env INC_PATH和env LIB_PATH这两行它们显示了实际使用的头文件和库文件路径。如果这两个路径不对编译会报找不到头文件的错误。接下来执行 makemake编译过程会依次编译各个源文件最后链接生成可执行文件。输出如下Scanning dependencies of target main [ 14%] Building CXX object CMakeFiles/main.dir/utils.cpp.o [ 28%] Building CXX object CMakeFiles/main.dir/dvpp_process.cpp.o [ 42%] Building CXX object CMakeFiles/main.dir/model_process.cpp.o [ 57%] Building CXX object CMakeFiles/main.dir/singleOp_process.cpp.o [ 71%] Building CXX object CMakeFiles/main.dir/sample_process.cpp.o [ 85%] Building CXX object CMakeFiles/main.dir/main.cpp.o [100%] Linking CXX executable /home/HwHiAiUser/Samples/demos/acl_execute_model/acl_dvpp_resnet50/out/main [100%] Built target main可执行文件生成在out/main。如果你需要修改编译参数比如添加自定义头文件路径或链接库可以编辑src/CMakeLists.txt。关键参数包括参数作用默认值INC_PATH头文件搜索路径/usr/local/Ascend/acllib/include/LIB_PATH库文件搜索路径/usr/local/Ascend/acllib/lib64/stub/CMAKE_SKIP_RPATH跳过 RPATH 设置FALSECMAKE_BUILD_TYPE编译类型Release如果你在编译其他 Demo 时遇到CMakeCache.txt残留导致配置错误可以先清理再重新 cmakerm -rf * cmake ../../../src -DCMAKE_SKIP_RPATHTRUE make这个操作在classificationDemo 的编译过程中可能会用到因为该目录下可能已有旧的 CMakeCache.txt。4. 运行验证串口输出与推理结果日志编译完成后进入out目录运行程序。以acl_dvpp_resnet50为例cd ../../../out/ ./main如果目录下有run.sh启动脚本优先执行run.sh因为它可能设置了额外的环境变量或参数bash run.sh运行成功后你会看到类似下面的日志输出[INFO] acl init success [INFO] open device 0 success [INFO] create context success [INFO] create stream success [INFO] get run mode success [INFO] dvpp init resource success [INFO] load model ../model/resnet50_aipp.om success [INFO] create model description success [INFO] create model output success [INFO] start to process picture:../data/dog1_1024_683.jpg [INFO] memcpy. device buffer size is 35635 [INFO] Process dvpp success [INFO] model execute success [INFO] execute sigleOp Cast success [INFO] execute ArgMaxD success [INFO] sigleOp process success [INFO] --- index of classification result is 161 [INFO] start to process picture:../data/dog2_1024_683.jpg [INFO] memcpy. device buffer size is 41398 [INFO] Process dvpp success [INFO] model execute success [INFO] execute sigleOp Cast success [INFO] execute ArgMaxD success [INFO] sigleOp process success [INFO] --- index of classification result is 267 [INFO] unload model success, modelId is 1 [INFO] execute sample success [INFO] end to destroy stream [INFO] end to destroy context [INFO] end to reset device is 0 [INFO] end to finalize acl关键验证点acl init success表示 ACL 初始化成功open device 0 success表示设备打开成功load model success表示模型加载成功model execute success表示推理执行成功最后的index of classification result是分类结果索引。对于objectdetectionDemo运行bash run.sh后输出[INFO] acl init success [INFO] open device 0 success [INFO] create context success [INFO] create stream success [INFO] load model ../model/yolov3.om success [INFO] create model description success [INFO] create model output success [INFO] dvpp init resource ok [INFO] convert image success [INFO] model execute success 115 116 926 598 dog99% [INFO] convert image success [INFO] model execute success 48 110 474 261 boat99% [INFO] Execute sample success [INFO] unload model success, modelId is 1 [INFO] end to destroy stream [INFO] end to destroy context [INFO] end to reset device is 0 [INFO] end to finalize acl这里输出了检测框坐标和类别置信度dog99%表示检测到狗置信度 99%。对于classificationDemo运行./run.sh后输出[INFO] Acl init success [INFO] Open device 0 success [INFO] load model ../model/googlenet.om success [INFO] create model description success [INFO] create model output success [INFO] Read image ../data/rabit.jpg [INFO] Resize image ../data/rabit.jpg [INFO] model execute success [INFO] top 1: index[330] value[0.624512] [INFO] top 2: index[331] value[0.373047] [INFO] top 3: index[332] value[0.002289] [INFO] top 4: index[104] value[0.000003] [INFO] top 5: index[106] value[0.000001]这里输出了 top-5 分类结果及置信度。如果你在运行过程中看到[sudo] password for HwHiAiUser: Sorry, user HwHiAiUser is not allowed to execute ./tsdaemon_add_to_usermemory.sh as root这样的提示不用慌这是权限提示不影响程序继续运行。程序会继续执行后续步骤最终输出推理结果。5. 常见报错排查401、local proxy failed、reading choices 与 OAuth 问题在 DLAP221 上编译运行 Demo 时可能会遇到几类典型报错。下面逐一分析原因和解决方法。报错一cmake 找不到头文件CMake Error: The following variables are used in this project, but they are set to NOTFOUND: INC_PATH原因DDK_PATH或NPU_HOST_LIB环境变量未设置且 CMakeLists.txt 中的默认路径不存在。解决方法export DDK_PATH/home/HwHiAiUser/Ascend/ascend-toolkit/latest export NPU_HOST_LIB/home/HwHiAiUser/Ascend/ascend-toolkit/latest/acllib/lib64/stub然后重新执行 cmake。报错二make 链接时报 undefined referenceundefined reference to aclInit原因库文件路径不对或者链接顺序有问题。检查CMakeLists.txt中的target_link_libraries是否包含了libascendcl.so。如果路径正确但仍报错尝试清理后重新编译rm -rf * cmake ../../../src -DCMAKE_SKIP_RPATHTRUE make报错三运行时报 open device failed[ERROR] open device 0 failed原因设备节点权限不足或者 NPU 驱动未加载。检查/dev/davinci0是否存在权限是否为rw。可以尝试用 root 权限运行或者将当前用户加入HwHiAiUser组。报错四TaoToken API 返回 401{error: {message: Invalid API key, type: invalid_request_error}}原因API Key 无效或未正确设置。检查TAOTOKEN_API_KEY环境变量是否已 export或者 Claude Code settings.json 中的ANTHROPIC_API_KEY是否填写正确。注意 Base URL 应填写https://taotoken.net/api不要多加/v1路径。报错五local proxy failedError: local proxy failed to connect原因本地代理配置冲突。如果你在终端设置了http_proxy或https_proxy环境变量可能会导致 API 请求失败。解决方法unset http_proxy unset https_proxy然后重新发起请求。报错六reading choices 解析失败Error: reading choices: unexpected end of JSON input原因API 返回的响应格式不符合预期通常是请求参数中的model字段填写错误。检查模型 ID 是否与 TaoToken 支持的模型列表一致。可以访问https://taotoken.net/api-keys查看可用模型或访问https://taotoken.net/doc查阅接入文档。报错七OAuth 认证失败Error: OAuth token exchange failed原因OAuth 流程中回调地址或 client_id 配置错误。如果你使用 Claude Code 的 OAuth 登录方式确保ANTHROPIC_BASE_URL设置为https://taotoken.net/api并且没有额外的代理干扰。报错八模型转换失败ATC run failed: [ERROR] Failed to parse the model file原因模型文件格式不匹配或者 aipp.cfg 配置有误。检查model_cvt.sh中的 ATC 命令参数确保--input_shape、--input_format等参数与模型匹配。6. 从编译到推理DLAP221 Demo 运行后的下一步跑通 Demo 只是第一步。当你看到model execute success和分类结果输出后可以尝试修改main.cpp中的输入图片路径换成自己的图片验证模型在实际数据上的表现。也可以调整CMakeLists.txt中的编译选项开启调试信息方便定位问题。如果你需要对比不同模型的效果可以在 TaoToken 上调用云端模型做快速验证。访问https://taotoken.net/api-keys获取 API Key访问https://taotoken.net/doc查看接入文档或者直接访问https://taotoken.net/api体验模型对话。对于长期编码和 Agent 任务可以了解 Coding Plan 的详细方案。回到 DLAP221 本身建议你接下来做三件事第一把acl_execute_model下的其他样例也编译运行一遍熟悉不同 DVPP 接口的用法第二尝试修改run.sh中的参数观察输出变化第三阅读src/CMakeLists.txt理解每个编译选项的作用。这些操作能帮你从“跑通 Demo”过渡到“理解 Demo”为后续开发自己的推理程序打下基础。运行成功的标志很简单终端输出execute sample success并且能看到具体的分类索引或检测框坐标。如果你卡在某一步优先检查环境变量和路径配置这两个是最高频的问题来源。
返回列表