Skip to content

  • 体验新版
    • 正在加载...
  • 登录
  • PaddlePaddle
  • Paddle
  • Issue
  • #2933

P
Paddle
  • 项目概览

PaddlePaddle / Paddle
大约 2 年 前同步成功

通知 2325
Star 20933
Fork 5424
  • 代码
    • 文件
    • 提交
    • 分支
    • Tags
    • 贡献者
    • 分支图
    • Diff
  • Issue 1423
    • 列表
    • 看板
    • 标记
    • 里程碑
  • 合并请求 543
  • Wiki 0
    • Wiki
  • 分析
    • 仓库
    • DevOps
  • 项目成员
  • Pages
P
Paddle
  • 项目概览
    • 项目概览
    • 详情
    • 发布
  • 仓库
    • 仓库
    • 文件
    • 提交
    • 分支
    • 标签
    • 贡献者
    • 分支图
    • 比较
  • Issue 1,423
    • Issue 1,423
    • 列表
    • 看板
    • 标记
    • 里程碑
  • 合并请求 543
    • 合并请求 543
  • Pages
  • 分析
    • 分析
    • 仓库分析
    • DevOps
  • Wiki 0
    • Wiki
  • 成员
    • 成员
  • 收起侧边栏
  • 动态
  • 分支图
  • 创建新Issue
  • 提交
  • Issue看板
已关闭
开放中
Opened 7月 18, 2017 by saxon_zh@saxon_zhGuest

集成baidu-rpc出现unknow command line flag 'use_gpu'

Created by: fingthinking

本问题是使用C-API,链接libpaddle_capi_whole.a库,运行的时候遇到UnKnown class type: data尝试解决问题中遇到,主要显示内容如下: unknow command line flag 其问题是在使用动态库libpaddle_capi_shared.so的时候,gflags不识别--use_gpu=False参数。 原使用方式为:

char* argv[] = {(char*)"--use_gpu=False"};
 // init paddle
CHECK(paddle_init(1, (char**)argv));

通过将代码改为:

char* argv[] = {(char*)"--use_gpu=False"};
 // init paddle
CHECK(paddle_init(0, (char**)argv));

即不传参数了,将该问题解决 但该解决方案属于治标不治本的方法,如果今后有需要使用gpu的需求,仍将面临该问题。

提供一些思路,在使用libpaddle_capi_whole.a的时候,遇到一些编译问题,其中包括gflags与baidu-rpc的兼容性问题,baidu-rpc中使用的gflag的版本是2.0,其中关键不兼容代码:

FlagRegisterer::FlagRegisterer(const char* name, const char* type,
                               const char* help, const char* filename,
                               void* current_storage, void* defvalue_storage) {
  if (help == NULL)
    help = "";
  // FlagValue expects the type-name to not include any namespace
  // components, so we get rid of those, if any.
  if (strchr(type, ':'))
    type = strrchr(type, ':') + 1;
  FlagValue* current = new FlagValue(current_storage, type, false);
  FlagValue* defvalue = new FlagValue(defvalue_storage, type, false);
  // Importantly, flag_ will never be deleted, so storage is always good.
  CommandLineFlag* flag = new CommandLineFlag(name, help, filename,
                                              current, defvalue);
  FlagRegistry::GlobalRegistry()->RegisterFlag(flag);   // default registry
}

而在paddle中使用的gflags的版本为2.2.0以上,代码如:

template <typename FlagType>
FlagRegisterer::FlagRegisterer(const char* name,
                               const char* help,
                               const char* filename,
                               FlagType* current_storage,
                               FlagType* defvalue_storage) {
  FlagValue* const current = new FlagValue(current_storage, false);
  FlagValue* const defvalue = new FlagValue(defvalue_storage, false);
  RegisterCommandLineFlag(name, help, filename, current, defvalue);
}

即2.2版本的gflags与2.0版本存在不兼容问题,该问题通过在2.2版本中增加2.0版本的不兼容代码及相关逻辑,可以解决,但是还是没能够识别出use_gpg参数,这个就不明白为什么了,请paddle帮忙解答疑惑。

指派人
分配到
无
里程碑
无
分配里程碑
工时统计
无
截止日期
无
标识: paddlepaddle/Paddle#2933
渝ICP备2023009037号

京公网安备11010502055752号

网络110报警服务 Powered by GitLab CE v13.7
开源知识
Git 入门 Pro Git 电子书 在线学 Git
Markdown 基础入门 IT 技术知识开源图谱
帮助
使用手册 反馈建议 博客
《GitCode 隐私声明》 《GitCode 服务条款》 关于GitCode
Powered by GitLab CE v13.7