后端
文章平均质量分 94
钊YChen
天道酬勤
展开
-
Pytorch Dataloader 模块源码分析(二):Sampler / Fetcher 组件及 Dataloader 核心代码
总算写完了 DataLoader 部分,总结这一块的源码主要是因为公司最近用到了相关的业务,需要对 Dataset 和 DataLoader 进行改造,因此认真读了这一部分的源码。总而言之,Dataset 和 DataLoader 模块为整个 Pytorch 提供了通用的数据加载和预处理接口,整体代码有很高的鲁棒性。如果说这个模块还有什么可以改进的地方,主要就在于 I/O 的部分,Dataset 在实现 shuffle 操作时,加载数据使用的是随机 I/O,这会大幅降低 I/O。...原创 2022-08-30 15:24:07 · 720 阅读 · 0 评论 -
Pytorch Dataloader 模块源码分析(一):整体框架与 Dataset 组件
前文提到 Dataset 类支持两种风格,map 和 iterable,map 风格指的是该 Dataset 对象可以通过传入一个下标(键)来访问具体的值,也就是内部实现是一个哈希表(python 中就是字典),而 Iterable 数据集则是前文提到的可迭代对象,可以通过 for 循环遍历内部的数据。由于篇幅较长,后面的部分将放在后半篇。因此,map 风格的 Dataset 需要实现__getitem__方法而 iterable 风格的 Dataset 需要实现__iter__和__next__方法。..原创 2022-08-29 16:57:41 · 696 阅读 · 0 评论 -
为什么 C++ 比 Python 快?从编译器和解释器的角度分析差异
本文从 C++ 和 Python 的运行过程入手,从编译器和解释器的差异分析了为什么 C++ 会比 Python 的运行速度快。在现代的企业场景中,追求极致代码运算效率的场景通常还是使用的 C++,比如服务器端编程、游戏编程等。...原创 2022-08-28 14:19:11 · 2499 阅读 · 0 评论 -
线程池大小选择:针对 I/O 密集型场景和 CPU 密集型场景
总的来说,线程 I/O 时间比例越高,需要越多线程来 overlap 这个 I/O,反之需要越少的线程。同时需要认识到,并不是使用线程池就一定比单线程高效,单线程相比多线程避免了上下文切换时间和锁。因此也可以很高效。有了以上方法,我们就可以做到在不同业务场景中选择不同的线程池大小了。......原创 2022-08-23 23:57:27 · 3031 阅读 · 1 评论 -
Docker 与 Kubernetes 的基本原理与联系
可以看到,虚拟机需要初始化客户端的操作系统,而 Docker 是运行在主机的操作系统上的,这意味着 Docker 在创建时不需要重新加载一个操作系统,实现了高度的轻量化。这意味着 Docker 的创建速度要远高于虚拟机,且其需要的系统资源较少,一台主机上可以运行的 Docker 数量高于虚拟机。” Docker 的出现让这个梗成为了过去式,开发者可以打包他们的应用、依赖包和环境变量等配置到一个容器中,然后将这个容器发布安装 Linux 的机器上,这个过程省去了开发与运维配置相同环境的工作。...原创 2022-08-19 01:02:56 · 318 阅读 · 1 评论