背景是要把某个 caffe model 转换成 tensorrt 的 INT8 模型,然后遇到如下报错:
1 2E0403 08:54:35.951987 5704 engine.h:62] engine.cpp (572) - Cuda Error in commonEmitTensor: 1 (invalid argument) 3E0403 08:54:35.952157 5704 engine.h:62] Failure while trying to emit debug blob. 4engine.cpp (572) - Cuda Error in commonEmitTensor: 1 (invalid argument) 5E0403 08:54:35.952235 5704 engine.h:62] cuda/caskConvolutionLayer.cpp (355) - Cuda Error in execute: 1 (invalid argument) 6E0403 08:54:35.952291 5704 engine.h:62] cuda/caskConvolutionLayer.cpp (355) - Cuda Error in execute: 1 (invalid argument) 7W0403 08:54:35.952324 5704 calibrator.cpp:45] [4, 3, 224, 224] 8F0403 08:54:35.992761 5704 tensor.h:149] Check failed: cudaMemcpy(raw_mutable_data(), b.raw_data(), size_in_bytes, cudaMemcpyDefault) == cudaSuccess (700 vs. 0) 9*** Check failure stack trace: *** 10Aborted (core dumped) cuda error 700. 原来 cuda error 的错误号可以这么大。。
名词说明 # CUDA. 一般来说指的是CUDA SDK. 目前经常使用的是CUDA 8.0和CUDA 10.1两个版本. 8.0和10.1都是SDK的版本号. CUDNN. The NVIDIA CUDA® Deep Neural Network library (cuDNN). 是一个可以为神经网络提供GPU加速的库 compute capability. 是GPU的固有参数,可以理解为GPU的版本.越新的显卡该数值往往越高. tensorRT.NVIDIA TensorRT™ is an SDK for high-performance deep learning inference. 是一个深度学习推理库,旨在提供高性能的推理速度. plan file,也称为 engine plan. 是生成的tensorRT 模型文件. 兼容性说明 # Engine plan 的兼容性依赖于GPU的compute capability 和 TensorRT 版本, 不依赖于CUDA和CUDNN版本.
年中的时候接了离职的同事模型转换的锅,在不断地更新迭代的过程中,发现了一些痛点。 发现k8s能够解决一部分痛点,因此来分享一下在这方面的探索。
概述 # YUV是一种图像编码方式,或者称为色彩空间,与RGB是同级的概念. YUV是三个分量,Y,U和V,其中:
Halide is a programming language designed to make it easier to write high-performance image and array processing code on modern machines.
halide有两个特性比较吸引人。一个是对于各种平台架构的支持。
迫于生计,最近要学习halide
先去学习/复习一下常见的编译优化技巧。
loop unrolling,也就是循环展开,顾名思义,就是把循环展开来写。
起因: # 公司部署在 hk 的爬虫服务器突然挂掉了。后来发现只是在深圳办公区无法访问。排查后发现原因是 docker 的网络(包括 docker network 的 subnet 或者是某个容器的 ip)与该 host 在内网的 ip 段相同,导致冲突。
现象: # 使用docker compose 挂载 named volume 无效(且没有错误提示)
在 medium 上看到一篇很赞的文章……无奈关键部分一律无法加载出来,挂了梯子也不行,很心塞。刚刚突然发现加载出来了,以防之后再次无法访问,所以搬运过来。
lua 是一门轻量级的脚本语言,好像比较适合写游戏?我在 太阳神三国杀 中见过很多 lua 脚本。由于 splash 的渲染脚本需要用 lua 来写,因此来学习一波。
先放资料,可能比较侧重于go在系统调用方面的内容.
这里不会记录详细的go的语法,只会记录学习的过程,踩到的坑,以及其他我认为值得记录的内容.
再次迫于生计。。。
参考了面向新人的 Python 爬虫学习资料
大致的学习路线为:
一: 简单的定向脚本爬虫( request — bs4 — re )
最近的项目需要java和python之间的进程通信,想到了之前使用过的 grpc。
迫于生计,又要从零开始学习spring.
在这篇文章之前,对java的基础是2015年写过一个java大作业,对spring是一无所知。
真是个不明觉厉的术语…其实是个特别简单的概念orz
系统为ubuntu 14.04
迫于特别想定时换壁纸,查了下解决方案。
发现只要删除掉/usr目录下所有的’.pyc’文件就可以
把 std::async、std::packaged_task、std::promise 三个放在一起来说,是因为它们都可以返回一个 std::future 对象。简单来说,当某个线程需要等待一个特定的一次性事件(one-off event),它可以用一个 “future” 来表示这个事件。
condition_variable 类是同步原语,能用于阻塞一个线程,或同时阻塞多个线程,直至另一线程修改共享变量(条件)并通知 condition_variable 。
多线程保护数据时,一种较为特殊的情况是只需要保护资源的初始化。
起因是想更新一个array类型的state,结果setState更新之后用console.log() debug 结果,发现结果特别玄学。。。