分类 软件 下的文章

问题出在CMake上。作者在写CMake脚本时使用了perl,这个工具在Linux发行版一般会自带(太常用了),但是Windows就没有。粗略看了一下,做了的工作至少包括了调用objcopy,这也恰好是出现LNK2017的原因,明明读取到了openblas.obj但是找不到符号。

解决方案一目了然,给Windows平台上安装perl环境即可。个人解决方案是直接借用了texlive里的tlperl包,可以成功完成任务。

翻车历史见这里

我胡汉三又回来了!!

编译的版本是Tensorflow 1.14。

为什么不用2?因为据说API大改,一堆坑。
像我这种改别人代码跑跑的肯定用不得

这次遇到的问题:

  1. 需要按照要求装MSYS,并且要使用MSYS2环境而不是MinGW环境(Github for Windows提供了MinGW,但是没有pacman);
  2. 记得适当修改bazel的缓存位置(真香),每次运行命令时使用选项--output_user_root,避免把缓存写在叠瓦技术(SMR)的机械硬盘上,那速度慢得爽的飞起;
  3. LLVM更新速度过快,而且现在已经更改项目名为llvm-project(之前是llvm),尽量使用和tensorflow发布时间相近的LLVM快照(时间过久会失效,但这不像Github的风格啊= =),在${PROJECT_ROOT}/tensorflow/workspace.bzl中可以找到并修改引用的LLVM版本;
  4. 截至Tensorflow 1.14和本文撰写时(2020/2/8),XLAnccl是不支持Windows平台或者支持的不是很好的(不折腾的话,几乎无法编译成功),不建议启用这两个特性;
  5. (某些特殊版本)需要修改${PROJECT_ROOT}/.bazelrc中,把build:cuda--define=using_cuda_nvcc=true注释掉,因为在Windows平台上不能使用--config=nonccl选项取消使用nccl,会报错;
  6. 有时候会遇到error C2993: 'Derived': 非类型模板参数 '__formal' 的不合法类型。在pytorch的issues里找到了类似的问题,说是由于依赖关系和多线程编译竞争带来的问题,设置为单线程编译--jobs 1可以解决问题(未测试):https://github.com/pytorch/pytorch/issues/25393

=============================================================

20200216补充

算了,放弃了,一直说是Eigen有问题,好像是关于GPU设备代码上找不到std::conj定义一类的问题。这几天网上冲浪的时候发现风评CUDA nvcc对于STL的支持很差,可能与这个有关。但是有dalao硬是编译出来了,就很不服气。在个人笔记本上编译特别浪费时间,1-2h起步,而且从来没成功过= =。等这波病情过去,借到好点的CPU资源再说吧。

certbot-auto这个东西真的有毒,搞个什么选项都要用户交互,搞得我以为自己每三个月要上一次服务器。。

一些可能会用到的选项:

在为域名申请证书的时候,先会要过一个challenge(认证),以证明该域名、该服务器都是归你所有。然后是三个方法(具体是啥给忘了),要手动选择进行验证。有个参数叫--preferred-challenges可以用于在命令行选择认证方法,不用交互,后面跟的参数值就是手动填写时括号里给的缩写。

续签的时候用的是另一个参数,叫做--authenticator,用于指定续签时的认证方式,同样是三选一,参数值也是在交互时给出了。

没看文档,看别人写的时候有点懵,顺便记录一下。

add_library(<name> SHARED ${<LIBNAME>_SRC})

比如说项目顶级目录为/project,按照CMake的文件夹结构,下面应该有一个src子目录存放所有的源码,则用add_library命令调用的方法是add_library(project SHARED ${project_SRC})

其中project_SRC代指的就是/project/src这个目录,变量名不用预先定义。

又是一个自由的,变量名有特殊含义的编程语言= =