博客文章¶
GPU的pin_memory是什么?
gpu的pin_memory
pin_memory就是在RAM上固定了一块内存,这个内存范围是被锁住的。pin这个单词很形象,很像rust中pin含义,用钉子把钉住,这个内存就不会释放,是安全的意思。GPU在传递数据的时候,就可以用DMA的方式,高效传输数据。否则,普通的cpu_memory,就会swap掉,然后访问的时候缺页中断,这样速度肯定就慢了很多。
text-generation-inference推理框架剖析
今天要介绍的主题是TGI(text-generation-inference), 是huggingface开源可用于生产环境的LLM大模型的推理部署服务。
由Router和Engine构成,Engine包括了InferServer。Router由Rust实现,InferServer由python端实现。Router相当于一个代理,面向业务会启动一个WebServer,包括对业务请求采用合适的策略进行动态Batch调整,实现大的吞吐和低的延迟。 Engine对各种LLM大语言模型进行支持,启动模型推理服务。 Router和Engine之间通过Protobuf定义消息和格式,通过GRPC方式就可以对推理服务进行访问。
bvar如何实现高性能多线程统计计数器
bvar是什么?
bvar是百度开源贡献给Apache的多线程环境下的计数器库。 通过它可以统计计数器、最大值、最小值、windows一段时间累加、除以秒数就是每秒,还有时延、分位值等等。
C++如何实现FP16(IEEE754-2008)类型?
计算机在进行数值计算时,首先需要对数据进行表示,比如F32、F16、F64、int32、int16、int8等等。特别在深度学习中,如果模型的参数是F32类型,那么计算耗时且保存的参数占用内存大。
为了准确率同时保证计算的速度,一般需要把模型转换成F16类型。F16即是通过16个bit(位)表示浮点数类型。
我们一起看一下:
- IEEE754-2008如何定义Float32和Float16的?
- float32和float16如何转换?在C++23版本以下标准库是没有f16类型的。
- Float16不用转换成float32比较,如何直接比较大小?