在安卓手机上运行本地DeepSeek-R1模型

参考
https://llm.mlc.ai/docs/deploy/android.html#android-sdk

环境准备

1. 安装rust

参考 https://forge.rust-lang.org/infra/other-installation-methods.html#which

使用了国内的镜像,下面的选项选择1

export RUSTUP_DIST_SERVER=https://mirrors.ustc.edu.cn/rust-static
export RUSTUP_UPDATE_ROOT=https://mirrors.ustc.edu.cn/rust-static/rustup
curl --proto '=https' --tlsv1.2 -sSf https://mirrors.ustc.edu.cn/misc/rustup-install.sh  | sh

在这里插入图片描述

2. 安装Android Studio

参考 https://developer.android.com/studio

mkdir -p /root/android && cd /root/android
wget https://redirector.gvt1.com/edgedl/android/studio/ide-zips/2024.1.1.12/android-studio-2024.1.1.12-linux.tar.gz
tar -xvzf android-studio-2024.1.1.12-linux.tar.gz
cd android-studio
wget https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip?hl=zh-cn
unzip commandlinetools-linux-11076708_latest.zip\?hl\=zh-cn
export JAVA_HOME=/root/Downloads/android-studio/jbr
cmdline-tools/bin/sdkmanager "ndk;27.0.12077973" "cmake;3.22.1"  "platforms;android-34" "build-tools;33.0.1" --sdk_root='sdk'

在这里插入图片描述

3. 设置环境变量

. "$HOME/.cargo/env"
export ANDROID_NDK=/root/android/android-studio/sdk/ndk/27.0.12077973
export TVM_NDK_CC=$ANDROID_NDK/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android24-clang
export JAVA_HOME=/root/android//android-studio/jbr
export ANDROID_HOME=/root/android/android-studio/sdk
export PATH=/usr/local/cuda-12/bin:$PATH
export PATH=/root/android/android-studio/sdk/cmake/3.22.1/bin:$PATH

打包运行

1. 修改配置文件

修改mlc-package-config.json
参考如下

{
    "device": "android",
    "model_list": [
        {
            "model": "HF://mlc-ai/DeepSeek-R1-Distill-Qwen-7B-q4f16_1-MLC",
            "estimated_vram_bytes": 8250586449,
            "model_id": "DeepSeek-R1-Distill-Qwen-7B-q4f16_1-MLC"
        },
         {
            "model": "HF://mlc-ai/gemma-2-2b-it-q4f16_1-MLC",
            "model_id": "gemma-2-2b-it-q4f16_1-MLC",
            "estimated_vram_bytes": 3000000000
        }
    ]
}


2. 运行打包命令

 mlc_llm package

在这里插入图片描述

3.创建签名

cd /root/android/mlc-llm/android/MLCChat
/root/android/android-studio/jbr/bin/keytool -genkey -v -keystore my-release-key.jks -keyalg RSA -keysize 2048 -validity 10000
Enter keystore password:  
Re-enter new password: 
What is your first and last name?
  [Unknown]:  Any
What is the name of your organizational unit?
  [Unknown]:  Any
What is the name of your organization?
  [Unknown]:  Any
What is the name of your City or Locality?
  [Unknown]:  Any
What is the name of your State or Province?
  [Unknown]:  Any
What is the two-letter country code for this unit?
  [Unknown]:  CN
Is CN=Any, OU=Any, O=Any, L=Any, ST=Any, C=CN correct?
  [no]:  yes

Generating 2,048 bit RSA key pair and self-signed certificate (SHA256withRSA) with a validity of 10,000 days
        for: CN=Any, OU=Any, O=Any, L=Any, ST=Any, C=CN
[Storing my-release-key.jks]

4.修改gradle配置

如果是本地可以WIFI或USB调试不用签名,在服务器构建需要签名
修改app/build.gradle为如下内容,主要是增加了签名部分,注意确认签名文件的位置

plugins {
    id 'com.android.application'
    id 'org.jetbrains.kotlin.android'
}

android {
    namespace 'ai.mlc.mlcchat'
    compileSdk 34

    defaultConfig {
        applicationId "ai.mlc.mlcchat"
        minSdk 26
        targetSdk 33
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        vectorDrawables {
            useSupportLibrary true
        }
    }

    
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    kotlinOptions {
        jvmTarget = '1.8'
    }
    buildFeatures {
        compose true
    }
    composeOptions {
        kotlinCompilerExtensionVersion '1.4.3'
    }
    packagingOptions {
        resources {
            excludes += '/META-INF/{AL2.0,LGPL2.1}'
        }
    }

    signingConfigs {
        release {
            storeFile file("/root/android/mlc-llm/android/MLCChat/my-release-key.jks")
            storePassword "123456"
            keyAlias "mykey"
            keyPassword "123456"
        }
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.release
        }
    }
}

dependencies {
    implementation project(":mlc4j")
    implementation 'androidx.core:core-ktx:1.10.1'
    implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.6.1'
    implementation 'androidx.activity:activity-compose:1.7.1'
    implementation platform('androidx.compose:compose-bom:2022.10.00')
    implementation 'androidx.lifecycle:lifecycle-viewmodel-compose:2.6.1'
    implementation 'androidx.compose.ui:ui'
    implementation 'androidx.compose.ui:ui-graphics'
    implementation 'androidx.compose.ui:ui-tooling-preview'
    implementation 'androidx.compose.material3:material3:1.1.0'
    implementation 'androidx.compose.material:material-icons-extended'
    implementation 'androidx.appcompat:appcompat:1.6.1'
    implementation 'androidx.navigation:navigation-compose:2.5.3'
    implementation 'com.google.code.gson:gson:2.10.1'
    implementation fileTree(dir: 'src/main/libs', include: ['*.aar', '*.jar'], exclude: [])
    testImplementation 'junit:junit:4.13.2'
    androidTestImplementation 'androidx.test.ext:junit:1.1.5'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
    androidTestImplementation platform('androidx.compose:compose-bom:2022.10.00')
    androidTestImplementation 'androidx.compose.ui:ui-test-junit4'
    debugImplementation 'androidx.compose.ui:ui-tooling'
    debugImplementation 'androidx.compose.ui:ui-test-manifest'

}

5.命令行编译

运行编译命令,完成后在app/build/outputs/apk/release生成app-release.apk安装包,下载到手机上运行
运行App需要能访问huggingface下载模型(参考文档中的bundle方法需要ADB刷入模型数据)

./gradlew assembleRelease

在这里插入图片描述

6. 运行体验

运行App需要能访问huggingface下载模型
在这里插入图片描述

### DeepSeek-R1 手机本地部署指南 对于希望在移动设备上运行 DeepSeek-R1 的用户来说,直接在手机上实现完整的模型训练和服务部署较为复杂。然而,可以通过间接方式达成目标——即通过将手机连接到已配置好的服务器或利用特定应用程序来访问这些功能。 #### 使用远程服务器作为解决方案 由于大多数智能手机的操作系统(iOS 和 Android)并不适合直接安装和运行复杂的机器学习框架及其依赖项,推荐的方法是在一台性能较强的计算机上完成 DeepSeek-R1 的设置工作,并将其托管在一个可由手机访问的位置。这台计算机可以是个人电脑、云实例或其他形式的支持网络通信的服务端设备[^1]。 一旦完成了上述准备工作,则可以在手机浏览器中输入该服务器的 IP 地址加上指定端口(例如 `http://<server_ip>:8000`),以此来调用 DeepSeek-R1 提供的功能接口。如果需要更便捷的方式,在某些情况下也可以开发专门的应用程序以便更好地集成此过程[^2]。 #### 设置环境变量以适应不同需求 为了使服务能够正常运作并响应来自外部客户端(如手机)发出请求,可能还需要调整一些必要的环境参数: ```bash set OLLAMA_MODELS=/path/to/models set OLLAMA_HOST=<your_server_ip>:8000 set OLLAMA_ORIGINS=* ``` 请注意替换 `<your_server_ip>` 为实际使用的服务器地址。这里假设服务器已经正确设置了防火墙规则允许外部访问其开放端口。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值