Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

小米手机需要root吗? #7

Open
zhouwg opened this issue Apr 4, 2024 · 5 comments
Open

小米手机需要root吗? #7

zhouwg opened this issue Apr 4, 2024 · 5 comments

Comments

@zhouwg
Copy link

zhouwg commented Apr 4, 2024

您好,

冒昧打扰您了。

我是一个AI领域的小白,对贵公司的这个开源项目很感兴趣(打算移植到个人AI学习/研究开源项目中)。

昨天半夜下载了这个代码。今天上午在市场上购买的小米14上花了半天(4个小时)测试,目前遇到如下问题:

(1)总是提示无法加载模型

看了下c++代码,发现找不到模型文件与高通库(代码里dump出来的路径如果没有root权限,无法访问)。

adb push libQnnSystem.so /data/user/0/com.xiaomi.stablediffusion/files/
adb: error: stat failed when trying to push to /data/user/0/com.xiaomi.stablediffusion/files/: Permission denied

将C++层代码里的所有模型路径全部改到/sdcard/路径(便于用demo的人用adb上传模型文件),将所有高通库路径改到apk 包名路径/data/data/com.xiaomi.stablediffusion/上(apk上层用代码将高通库从asset目录里拷贝到这个目录即可,无需在native层里调用setenv),才解决这一步。(btw,这些使用高通QNN SDK遇到的坑在使用最新QNN SDK的个人项目里都踩过,已经都解决了)。

(2)无法加载高通库

04-04 13:11:19.056 5404 5450 I KANTV : [makeup_jni.cpp, Java_com_xiaomi_stablediffusion_StableDiffusion_Init, 55]: path:/data/data/com.xiaomi.stablediffusion/
04-04 13:11:19.056 5404 5450 I KANTV :
04-04 13:11:19.056 5404 5450 I KANTV :
04-04 13:11:19.056 5404 5450 I KANTV : [makeup_jni.cpp, Java_com_xiaomi_stablediffusion_StableDiffusion_Init, 59]: setenv finished
04-04 13:11:19.056 5404 5450 I KANTV :
04-04 13:11:19.056 5404 5450 I KANTV : [makeup_jni.cpp, Java_com_xiaomi_stablediffusion_StableDiffusion_Init, 68]: setenv finished
04-04 13:11:19.056 5404 5450 I KANTV :
04-04 13:11:19.056 5404 5450 I KANTV : [makeup_jni.cpp, Java_com_xiaomi_stablediffusion_StableDiffusion_Init, 74]: path:/data/data/com.xiaomi.stablediffusion/
04-04 13:11:19.056 5404 5450 I KANTV :
04-04 13:11:19.056 5404 5450 I KANTV :
04-04 13:11:19.056 5404 5450 I KANTV : [QCOMModel.cpp, load, 27]: TextEncoderModel=== , /sdcard/kantv/text_encoder_quantized.serialized.bin
04-04 13:11:19.056 5404 5450 I KANTV :
04-04 13:11:19.057 5404 5450 I KANTV : [QCOMModel.cpp, load, 74]: Model:
04-04 13:11:19.057 5404 5450 I KANTV :
04-04 13:11:19.057 5404 5450 I KANTV : [QCOMModel.cpp, load, 75]: Backend: /data/data/com.xiaomi.stablediffusion/libQnnHtp.so
04-04 13:11:19.057 5404 5450 I KANTV :
04-04 13:11:19.058 5404 5450 I KANTV : [QCOMModel.cpp, load, 96]: initializing QNN Function Pointers: could not load backend:/data/data/com.xiaomi.stablediffusion/libQnnHtp.so ok
04-04 13:11:19.058 5404 5450 I KANTV :
04-04 13:11:19.058 5404 5450 I KANTV :
04-04 13:11:19.059 5404 5450 I KANTV : [QCOMModel.cpp, load, 104]: Error initializing QNN System Function Pointers /data/data/com.xiaomi.stablediffusion/libQnnSystem.so, error Inappropriate ioctl for device
04-04 13:11:19.059 5404 5450 I KANTV :
04-04 13:11:19.059 5404 5450 E KANTV : [makeup_jni.cpp, Java_com_xiaomi_stablediffusion_StableDiffusion_Init, 76]: prompt_solver load failed!
04-04 13:11:19.059 5404 5450 E KANTV :
04-04 13:11:19.059 5404 5450 D Text2GraphActivity$InitThread: [KANTV][com.xiaomi.stablediffusion.Text2GraphActivity$InitThread.java:114,startLoad()] startLoad: 5.通知主线程,此时Init线程加载模型完成-3
04-04 13:11:19.068 5404 5450 E Text2GraphActivity$2: [KANTV][com.xiaomi.stablediffusion.Text2GraphActivity$2.java:357,handleMessage()] SD Init failed

通过diff对比,发现这个工程里附带的高通专门提供的QNN lib与我在高通官网下载的QNN SDK里的lib不一致。

在这个工程的repo issue list里看到别的人已经跑起来了,不知道问题出在哪里?如果方便的话,还请百忙之中指点一下。

谢谢您的时间并致以真诚的感谢。

@GainLee
Copy link

GainLee commented Apr 9, 2024

#1

不需要root。8650的适配看来有点问题

@zhouwg
Copy link
Author

zhouwg commented Apr 9, 2024

#1

不需要root。8650的适配看来有点问题

谢谢!这些适配的问题如果没有项目维护人的指点,靠项目用户自己一点点摸索,可能有点困难。

btw,贵公司的这个项目中部分如何使用QNN的代码(这些代码在高通公开的资料里看不到)对我一个个人项目帮助很大,跨越了一个block了几天的问题。在此谢谢了。

@GainLee
Copy link

GainLee commented Apr 9, 2024

#1
不需要root。8650的适配看来有点问题

谢谢!这些适配的问题如果没有项目维护人的指点,靠项目用户自己一点点摸索,可能有点困难。

btw,贵公司的这个项目中部分如何使用QNN的代码(这些代码在高通公开的资料里看不到)对我一个个人项目帮助很大,跨越了一个block了几天的问题。在此谢谢了。

哈哈,别误会了,我不是雷总的部下,看到这个repo对于端侧AI的探索做出了不小贡献,刚好我了解一点这块就扫了一眼issues。

QNN的资料是公开的,SDK里面有个sample可以参考

@zhouwg
Copy link
Author

zhouwg commented Apr 9, 2024

#1
不需要root。8650的适配看来有点问题

谢谢!这些适配的问题如果没有项目维护人的指点,靠项目用户自己一点点摸索,可能有点困难。
btw,贵公司的这个项目中部分如何使用QNN的代码(这些代码在高通公开的资料里看不到)对我一个个人项目帮助很大,跨越了一个block了几天的问题。在此谢谢了。

哈哈,别误会了,我不是雷总的部下,看到这个repo对于端侧AI的探索做出了不小贡献,刚好我了解一点这块就扫了一眼issues。

QNN的资料是公开的,SDK里面有个sample可以参考

喔。

谢谢。高通官网上下载的QNN SDK sample里的代码看过了。

@caofx0418
Copy link

#1
不需要root。8650的适配看来有点问题

谢谢!这些适配的问题如果没有项目维护人的指点,靠项目用户自己一点点摸索,可能有点困难。
btw,贵公司的这个项目中部分如何使用QNN的代码(这些代码在高通公开的资料里看不到)对我一个个人项目帮助很大,跨越了一个block了几天的问题。在此谢谢了。

哈哈,别误会了,我不是雷总的部下,看到这个repo对于端侧AI的探索做出了不小贡献,刚好我了解一点这块就扫了一眼issues。
QNN的资料是公开的,SDK里面有个sample可以参考

喔。

谢谢。高通官网上下载的QNN SDK sample里的代码看过了。

问题已定位,高通接口 二进制不兼容,导致失败。

详细原因:

K70 Pro手机系统版本高,必须使用新的SDK,否则在读取so符号表正确,但进行调用qnn_net->getBackendBuildId()函数指针时错误,从而crash;
deviceCreate,参数设置和初始化设备,也会失败。
如下2个重要结构体失败:
typedef struct {
// 新增函数指针xxx
} QNN_INTERFACE_VER_TYPE;

typedef struct {
// 新增成员
const char* const* enableGraphs;
/// Used with QNN_CONTEXT_CONFIG_MEMORY_LIMIT_HINT
uint64_t memoryLimitHint;
/// Used with QNN_CONTEXT_CONFIG_PERSISTENT_BINARY
uint8_t isPersistentBinary;
/// Used with QNN_CONTEXT_CONFIG_BINARY_COMPATIBILITY
QnnContext_BinaryCompatibilityType_t binaryCompatibilityType;
};
} QnnContext_Config_t;

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants