You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Magic Leap 2中GGML模型存储路径问题:GPT-2加载失败排查

Magic Leap 2模型文件存储路径及加载方案

模型应存放的位置

Magic Leap 2应用有两个标准的可访问目录,适合存放GGML模型:

  • 内部私有files目录:推荐使用,路径格式为 /data/data/<你的应用包名>/files/,应用拥有完全读写权限,属于应用私有空间,不会被其他应用访问。
  • 外部存储应用专属目录:适合需要用户手动传输文件的场景,路径格式为 /storage/emulated/0/Android/data/<你的应用包名>/files/,同样是应用私有空间,卸载应用时文件会被自动删除。

代码调整建议

不要使用相对路径,改用Magic Leap提供的API获取合法目录路径:

  1. 获取内部私有files目录并加载模型:
    #include <android/native_activity.h>
    
    // 需确保能拿到ANativeActivity指针(通常从NativeActivity的回调中获取)
    const char* internalFilesDir = ANativeActivity_getInternalFilesDir(activity);
    std::string modelPath = std::string(internalFilesDir) + "/gpt-2-117M";
    std::ifstream file(modelPath);
    if (!file.good()) {
        return "wrong";
    }
    
  2. 从外部存储应用专属目录加载模型:
    #include <android/native_activity.h>
    
    const char* externalFilesDir = ANativeActivity_getExternalFilesDir(activity, nullptr);
    std::string modelPath = std::string(externalFilesDir) + "/gpt-2-117M";
    std::ifstream file(modelPath);
    if (!file.good()) {
        return "wrong";
    }
    
  3. 若模型打包进APK的assets目录,需用AssetManager读取(不能直接用std::ifstream):
    #include <android/asset_manager.h>
    #include <android/native_activity.h>
    
    AAsset* asset = AAssetManager_open(activity->assetManager, "gpt-2-117M", AASSET_MODE_STREAMING);
    if (asset == nullptr) {
        return "wrong";
    }
    // 后续可将asset内容读取到内存后使用
    

额外注意事项

  • 确保模型文件名和路径完全匹配,Android文件系统区分大小写。
  • 手动传输文件到设备时,需确认文件已放置到正确的目录下,且权限设置为应用可读写(私有目录下的文件默认满足此要求)。

内容的提问来源于stack exchange,提问作者Xinyu Liu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 17:37:04