-
背景 公司内部的基于torch的toolbox发现某个版本之后,结果发生了偏移. 通过一系列排查,发现当导入cupy和torch的顺序不同时,计算结果会有所差异。 也就是说,如下两段代码会导致模型训练等环节的计算得到不同的结果. 1import cupy as cp 2import torch 1import torch 2import cupy as cp 3 最小复现代码 经过一番努力,把问题从内部框架中剥离了出来. 如下是得到的最小复现代码. 通过调整import cupy与import torch的相对顺序,会得到不同的结果. 1# import cupy as cp 2import torch 3import …
Read More -
写在毕业五年之后
May 28, 2023 · 1 min read五年的工作时光转眼即逝,我想写点什么来回顾这段经历。 工作主线 第一个offer hypereal 从毕业到现在已经五年了,但是我的求职之路要从2017年的找实习开始算起。我记得很清楚,人生第一次投出简历是给了一家做VR的初创公司hypereal(现在已经没有什么消息了,其官方Twitter的最后一条消息停留在了2017年5月)。当时我正坐在从哈尔滨到武汉的高铁上(G1276,全程14个小时),可能在ACMer求职群看到有人发了职位信息,就赶紧写了份简历投了过去。 面试中都是一些八股文,唯一记得的是有一道求费波纳契数的题目,我写了个矩阵快速幂。面试后第二天,我就收到了实习offer,当时真的高兴了好久。 …
Read More -
背景 需要使用bazel build onnxruntime 但是onnxruntime本身没有提供bazel相关的配置 作为单独的repo 将onnxruntime的包下载下来解压 主要的坑点在于动态库必须写全版本号,不然无法成功导入 完整的BUILD.bazel文件为 1 2 3 4cc_import( 5 name = "ort_lib", 6 hdrs = glob(["onnxruntime-linux-x64-1.13.1/include/**/*.h"]), 7 # FIXME: 这里的动态库必须写全版本号,不然会出现error: undefined reference to …
Read More -
Goodbye 2022
Dec 10, 2022 · 1 min read背景 转眼2022年也要过去了 虽然人变懒了,但也还是写点什么吧 晋升 人生中第一次晋升答辩(在商汤的晋升没有答辩,可能因为当时职级太低了233),还是有点紧张的。 花了不少时间做ppt,以及练习表述。自己做了四五次模拟答辩,最终顺利通过了。 虽然这个晋升比起朋友圈的几个大佬们晚了一年半甚至两年。。。我自己还是很开心 后来8月离职的时候天天在脉脉划水,认识了不少腾讯的老哥 其中一个老哥看到我的实名和我说"老哥我知道你,你年初晋升答辩的时候,我leader是你其中一个的评委。他回来和我们疯狂夸你,说他做了一天评委,只有你做的东西是他觉得确实有意义的".... 听起来有些离谱,但是在腾讯,倒也正常.jpg …
Read More -
背景 需要在gitlab pipelines中跑一堆测试 其中某些测试需要与rancher交互,在训练集群上执行一个训练任务 gitlab pipelines的默认用户是root,而rancher会默认以当前操作的user进行调度。 这里还涉及若干奇奇怪怪的,比较特异性的原因。 导致gitlab pipeline无法调度成功rancher. 总之,需求是,要在gitlab上以一个non-root 执行一些任务 由于缺少官方支持 (参考这里 ), 最终用了非常tricky的办法解决,踩了非常多的坑,因此记录下来,以飨后人 过程 为了方便表述,假设这个non-root user就叫"renkz" 在docker中添 …
Read More -
背景 2022年惊讶的发现,当时竟然没有写关于softmax的笔记,因此来补充一下。 proto 还是先看proto 12// Message that stores parameters used by SoftmaxLayer, SoftmaxWithLossLayer 3message SoftmaxParameter {4 enum Engine {5 DEFAULT = 0;6 CAFFE = 1;7 CUDNN = 2;8 }9 optional Engine engine = 1 [default = DEFAULT];1011 // The axis along which to perform the …
Read More -
背景 每一个cpp expression都有一个type 和 value category 属性 前者大家都比较了解,但是后者却常常被忽视 Value Categories in the c language cpp是由c语言发展而来,因此这里先介绍c 语言中的value category c语言只有简单的lvalue和rvalue两种 lvalue lvalue的"l"表示"left",表示lvalue可以出现在assigment operator的左边 更准确的说 Tip "lvalue is a value refer to an object" "an …
Read More -
最近在做一个智能算力的项目,其中需要用到redis维护某个全局的时间窗口 资料 https://redis.io/docs/about/ 极客时间Redis核心技术与实战 复杂数据结构的表示方式 学习过程中唯一让我迷惑的是一个嵌套的数据结构要如何表示 比如我想表示一个key为string, value为List的Hash 按照c++的语法,也就是一个 1std::unordered_map<std::string,std::vector<int>> 但是我发现,在redis中我无法设置value的数据类型 后来发现,redis这种kv存储其实所有的key是在同一个空间的,不存在嵌套关系 嵌套关系是根据相同 …
Read More -
接口 一个ABC,后面会继承这个类做各种实现 clean up function 代码比较好懂,唯一让我感到疑惑的是 clean up function 这部分 1 2 // FIXME: 不太理解为什么需要很多个clean up function 3 // Cleanup functions are stored in a single-linked list. 4 // The list's head node is inlined in the iterator. 5 struct CleanupNode { 6 // True if the node is not used. Only head nodes …
Read More