跳转至

博客文章

关于阅读源码的一点心得

朋友们,阅读优秀的源码可以学到很多,例如代码的结构组织、设计模式、为了解决一些问题特殊处理、写法技巧、优化策略等,同时也扩展了对编程语言的熟悉程度、关于这个项目的解决问题思路。

C++零拷贝反序列化库cista

C++零拷贝反序列化库cista

在阅读Candle(rust的机器学习库)时,看到了rust中利用mmap和Cow机制实现零拷贝反序列化加载模型的tensor。

其中为了解决mmap的数据生命周期为’a, 如果用Cow<’a>引用mmap返回的指针, 使用的生命周期如果超过’a则不能使用,不利于代码开发和引用。因此引入了yoke crate擦除生命周期。

借此,搜索了一下c++的零拷贝反序列化库,找到了cista

cista零拷贝反序列化库实现之swiss_table哈希表实现

朋友们,大家好!上文我们介绍了C++零拷贝反序列化库 cista,今天接着介绍一下 cista 库的实现。

swiss_table实现原理

可以从cista库的介绍中看到如下内容:

Comes with a serializable high-performance hash map and hash set implementation based on Google’s Swiss Table technique.

swiss table的实现可以参考简单了解下最近正火的SwissTable,讲解的很清晰。

本小节大多数内容是站在巨人肩膀上,引用简单了解下最近正火的SwissTable,加上作者结合cista库的介绍。

以三种实现hashmap的方式,看优缺点:

  • 链表法:指针稳定性,能采取扩容之外的手段阻止查询性能退化,比如把过长链表转换成搜索树。缺点:缓存不够友好,冲突较多的时候缓存命中率较低从而影响性能。

  • 线性探测法:缓存友好,加上冲突会有连锁影响,没有指针稳定性。

wsl2 ssh配置与ai编程环境搭建

采用windows + wsl2(安装ubuntu)的方式进行开发。

ssh网络配置

comate是一个和vscode类似的AI智能编码工具,但是没有wsl直接远程连接,只能通过ssh连接。 因此,需要windows上ssh远程wsl2。

推荐配置模式:

  • wsl2采用mirror模式,采用同一个ip,同时方便了网络代理的使用。

如果你的windows使用了clash工具使用网络代理,那么可以暴露一个7890的http代理端口(clash自带功能)。采用mirror模式,wsl2访问windows的7890端口进行代理就很方便了,直接配置127.0.0.1:7890即可。例如:proxychains4 -f /etc/proxychains.conf

Bash
[ProxyList]
http    127.0.0.1 7890
  • ubuntu安装配置openssh-server, 安装启动openssh-server服务很多资料了

Bash
1
2
3
sudo apt install openssh-server
sudo systemctl start ssh
sudo systemctl enable ssh
修改的ssh服务配置如下,只需要修改端口号,其他保持默认
Bash
1
2
3
4
5
6
sudo vim /etc/ssh/sshd_config

Port 2212
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::

  • windows上连接wsl2
Bash
ssh -p 2212 username@localhost

torch_memory_saver高性能CUDA内存管理工具实现

torch_memory_saver是一个开源的高性能CUDA内存管理工具,主要功能是允许暂停和恢复PyTorch张量的CUDA内存占用。保持用户使用的虚拟地址不变,暂停后释放显存,恢复重新分配显存,绑定到虚拟地址上。

本文会介绍核心原理,以及拦截CUDA runtime API的实现。你还可以看到如何实现一个python c++扩展。在sglang大模型推理库中也有使用到这个torch_memory_saver库。