V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
SawyerSong
V2EX  ›  Android

Mac 编译 XGBoost for Android

  •  
  •   SawyerSong · 2020-03-19 22:21:02 +08:00 · 8488 次点击
    这是一个创建于 1706 天前的主题,其中的信息可能已经有所发展或是发生改变。

    源码

    xgboost 的官方源码: https://github.com/dmlc/xgboost

    编译环境

    因为 mac 已经使用 clang 代替 gcc,不支持 OpenMp,需要先安装相关库: brew install libomp 安装 NDK 最新版本,本次使用 NDK-r16b 确保 clang 版本支持-fopenmp 参数 Mac OS 版本 10.15+ 以下是本机环境,通过 brew config 查看

    HOMEBREW_VERSION: 2.2.10
    Clang: 11.0 build 1100
    Git: 2.15.0 => /usr/local/bin/git
    Curl: 7.64.1 => /usr/bin/curl
    Java: 1.8.0_221, 1.8.0_121
    macOS: 10.15.2-x86_64
    CLT: 11.3.1.0.1.1576735732
    

    编译过程

    创建 build_32.sh 脚本:

    #!/bin/bash
    export ANDROID_NDK=/Users/<yourname>/Library/Android/sdk/android-ndk-r16b
    
    cmake .. \
    -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK/build/cmake/android.toolchain.cmake \
    -DCMAKE_BUILD_TYPE=Release \
    -DANDROID_ABI="armeabi-v7a" \
    -DANDROID_STL=c++_static \
    -DANDROID_TOOLCHAIN=clang \
    -DNATIVE_LIBRARY_OUTPUT=.
    
    make -j4
    

    在源码根目录下创建 build_android 目录,并在目录下执行脚本:

    mkdir build_android
    cd build_android
    ./build_32.sh
    

    编译产物

    源码根目录 /lib 下,会产生 libxgboost.so

    将近 60MB... 囧 rz

    Demo 及测试

    源码目录下,demo/c-api 即为 C 语音版本接口 Demo,修改 CMakeList.txt ,以便进行交叉编译

    cmake_minimum_required(VERSION 3.12)
    
    add_library( xgboost SHARED IMPORTED )
    set_target_properties(
            xgboost
            PROPERTIES IMPORTED_LOCATION
            ../libxgboost.so
    )
    include_directories(../../include)
    add_executable(api-demo c-api-demo.c)
    target_link_libraries(api-demo xgboost)
    

    在源码根目录下创建 build_android 目录,并在目录下执行脚本,脚本内容与前文一致:

    mkdir build_android
    cd build_android
    ./build_32.sh
    

    push 以下文件到 Android 手机的 /data/local/tmp 目录下:

    • 编译产物:api-demo
    • 模型训练和测试数据:
    • xgboost 动态库:
    adb push api-demo /data/local/tmp/demo/apiDemo/
    adb push agaricus.txt.test /data/local/tmp/demo/data/
    adb push agaricus.txt.train /data/local/tmp/demo/data/
    adb push libxgboost.so /data/local/tmp/demo/apiDemo/
    adb shell # 进入手机 shell
    cd /data/local/tmp/demo/apiDemo
    LIBRARY_PATH=/data/local/tmp/demo/apiDemo ./api-demo
    

    可以看到 demo 执行结果,就不贴图了

    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5296 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 09:20 · PVG 17:20 · LAX 01:20 · JFK 04:20
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.