justou 最近的时间轴更新
justou

justou

V2EX 第 171389 号会员,加入于 2016-05-01 22:34:52 +08:00
今日活跃度排名 13418
根据 justou 的设置,主题列表只有在你登录之后才可查看
二手交易 相关的信息,包括已关闭的交易,不会被隐藏
justou 最近回复了
12 天前
回复了 justou 创建的主题 C++ C++libtorch 多线程多 GPU 推理问题
经过一些测试和查找资料,发现单个进程内,cuda 似乎无法充分利用多显卡,可能是单个进程 cuda 能利用的数据带宽有限,得一个进程一个模型对应一个显卡。

例如有 4 个显卡,主进程启动 4 个子进程,每个子进程一个推理模型,主进程源源不断地将数据一个一个 batch 的送到进程共享队列,每个推理子进程一边从队列获取数据缓存一边推理一边将结果发送回主线程汇总,这些都异步进行,主要目的是让各个显卡尽量不要空闲,以此将利用率最大化。

最开始尝试将大量输入数据均摊到各个子进程,然后等他们完成,再获取结果,发现这种方式显卡利用率不高,主要是有些进程很快完成推理,有些进程则很慢,这种方式永远是在等最慢的那个进程,而其它进程早就空闲下来了。这种方式得到的 fps 跟单个进程多个线程的差不多,而通过上面这种流水线处理方式,fps 按显卡个数倍增。
94 天前
回复了 iqoo 创建的主题 程序员 C++ 类析构是按先进后出的顺序吗?
必须是那样, 利用 RAII 方式来保证一些动作得到执行
void func(){
auto socks_guard = wear_socks_guard(); // 构造时穿上袜子, 析构时脱掉袜子
auto shoes_guard = wear_shoes_guard(); // 构造时穿上鞋, 析构时脱掉鞋

// ....

// 先脱鞋
// 再脱袜子
}
115 天前
回复了 yoyoluck 创建的主题 Python pybind11 链接 py 库版本的问题
windows 下有个 embed 版本的 python, 比如 https://www.python.org/ftp/python/3.10.11/python-3.10.11-embed-amd64.zip 可以把它看成一个绿色版 python(可以用 pip 在这个环境中安装管理第三方库), 相当于把 python 当成动态链接库来用, 可以随你的程序一起发布
排队凑个热闹, 感谢 lz 的翻译工作
186 天前
回复了 dunhanson 创建的主题 程序员 Typora 怎么像 VS Code 那样多标签显示?
@oneKnow 发现 Obsidian 支持 vim ,准备弃 Typora 了...
@mepwang 让我想起了我的入门语言 Fortran ,数组在内存中列连续。出了学校再也没用过了,现在语言内置的并行计算功能越来越完善了
https://coarrays.sourceforge.io/doc.html
https://github.com/tkoenig1/coarray-tutorial/blob/main/tutorial.md
259 天前
回复了 justou 创建的主题 程序员 关于 ZeroMQ 的若干问题
@xgdgsc 感谢提供这个新思路.

@xsen 的确以前没怎么接触网络编程, 所以了解到 zmq 后才一拍脑门: 这东西不仅可以让软件解耦成更加容易开发和维护的独立模块, 还直接导致硬件也跟着解耦了, 比如给一批老旧的硬件系统新增加速卡(GPU/TPU)计算服务, 不用去动原有的硬件结构, 甚至可能无法动, 只需要一根网线牵出来连到新买的加速卡服务器上, 旧系统上原有的软件也不需要太多的更改, 只需要调用新开发的接口程序, 把数据发送到加速卡上计算就行了.
259 天前
回复了 justou 创建的主题 程序员 关于 ZeroMQ 的若干问题
@ysc3839 是的, 就是一个 C ABI 的 DLL 将整个 python 虚拟机隐藏在下面, 这样上层应用不论是 C++ C#还是其它什么实现都能用了. Cython 主要在 cdef public 的函数中对 C++传过来的指针进行数据转换然后再直接调用 python 函数. 既然已经到 C ABI 层次了, 可能 pybind11 与 Cython 区别不大了, 主要是我对 Cython 熟悉一点, 其实开发中最麻烦的还是 debug 问题, 两边无法直接联动.

@xsen @xgdgsc
改用 zmq 替换嵌入 python 虚拟机具体一点的想法是这样的:
还是一个 C ABI 的 DLL, 假设有图像处理和视频(几秒的视频)处理功能用 python 来实现, start_image_service, start_video_service 分别启动对应的 python 脚本在后台等待请求, process_image(void* image, ...), process_video(void* video, ...)将数据发送过去, 等待处理结果; python 接收到对应的字节后对其解码成适合自己的数据结构, 处理后发送回去.

不过随着应用的通信变得复杂, 这种方式可能会变得不可控, 看来大家说的 gprc 才是正确选择; 对延迟要求还是挺高的, 所以进程间通信越快越好.

其实我主要是想了解下 zmq 底层实现的一些思想, 也就是上面关于 ZeroMQ 的 1,2,3 个问题.
307 天前
回复了 nnegier 创建的主题 程序员 数学是上的凹图像可能和你想像的不太一样
另外,根据 f(x)在某点 c 的二阶导判断极大极小值:
f''(c)>0, concave up, minimum
f''(c)<0, concave down, maximum

我经常按照以下方式来理解记忆:
f''(c)
v v 形状 concave up, v 的尖尖儿上极小值
0

f''(c)
^ ^形状 concave down, ^的尖尖儿上极大值
0
虽然简单推导下就能得出,但以上形象记忆非常适合脑筋急转弯 XD
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   700 人在线   最高记录 6067   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 12ms · UTC 22:14 · PVG 06:14 · LAX 15:14 · JFK 18:14
Developed with CodeLauncher
♥ Do have faith in what you're doing.