监督微调模型
基础微调方式
from accelerate import PartialState
from os import path
from datasets import load_dataset
from transformers import AutoModelForCausalLM, BitsAndBytesConfig, AutoTokenizer
from trl import SFTTrainer, SFTConfig
from peft import LoraConfig, PeftModel, get_peft_model
from peft.utils.peft_types import TaskType
from transformers.utils import i...
k8s部署vLLM
背景
k8s上部署推理服务很简便,vLLM作为一个流行的推理服务,自己也打包了镜像,可以比较方便地部署到k8s上,但还是免不了踩坑。
文档
vLLM Dockerfile
nvidia k8s插件
部署
部署依赖
k8s上为了能够使用和分配GPU,需要安装一个daemonset: NVIDIA/k8s-device-plugin,建议用官方提供的helm chart安装。
安装完成后可以查看node的信息,查看gpu的分配情况:
Capacity:
nvidia.com/gpu: 2
Allocatable:
nvidia.com/gpu: 2
其中插件提供3种GPU分配方式:按GPU数量、按时间切片(Time-Sl...
vLLM使用调研
背景
vLLM是一个为LLM服务的推理和管理工具
版本
当前撰写版本是0.5.4
文档
使用: https://docs.vllm.ai/en/latest/getting_started/quickstart.html
OpenAI兼容文档: https://docs.vllm.ai/en/latest/serving/openai_compatible_server.html
安装使用
# 直接使用pip安装
# 1. 安装最新release版
pip install vllm
# 2. 安装nightly版本
export VLLM_VERSION=0.5.4
pip install https://vllm-wheels.s3.us-west-2.am...
postgresql数据脱敏
背景
数据脱敏是一个很常见的需求,例如对手机号、住址等敏感信息,在普通查询时应该做模糊、改写等操作,避免被不当利用。
静态数据脱敏是存入数据库的数据直接进行了脱敏处理,是不可逆的,正常只有记录密码之类的才会这么做。
动态数据脱敏有几种方案,一种是在查询出结果后根据字段对结果集进行更改,另一种就是从源头更改SQL使查询出来的结果就是自带脱敏特性的。
而从源头更改又有两种方法,一种是直接对文本进行匹配和修改,也就是在客户端侧;一种是在数据库运行时通过hook改变执行语句和执行计划,也就是在服务端侧。
这次使用的postgresql anonymizer运用到了上述的若干方法,通过集成为数据库插件,方便用户使用类SQL的方式进行配置。
安装
安装参考文档:https://postgre...
rust导入未发布的库
背景
cargo自带的依赖配置很方便,但默认是从发布到crates.io上的内容拉取的。
当我们需要拉取一些未发布的代码(例如github的main分支最新commit),或者拉取一些自建仓库上的私有代码(例如gitea、gitlab等),需要一些额外的配置。
前提条件
我们需要确保进行编译所在的环境,已配置对应仓库的ssh key。如果想采用http的方式,则需要进行全局配置账号密码的形式。
配置
首先对于依赖,需要改变成指定路径的方式:
# Cargo.toml
[dependencies]
# 原本的ssh地址为git@gitea.com:owner/mydep.git
# cargo要求必须为标准的url形式,因此前面需要添加ssh://的前缀,后面的冒号需要更改为...
rust编译时注入编译信息
背景
不管是什么语言的服务,编译出来的二进制可能都有一个最简单的诉求,那就是可以快速看到这个二进制的一些详细信息。例如:
👉 ./app-bin -v
# 从左到右为: 二进制名, commit, OS/ARCH, rustc版本, cargo版本, 编译时间
👉 app-bin a78a4d3, linux/x86_64, compiled by rustc 1.74.1 (a28077b28 2023-12-04) and cargo 1.74.1 (ecb9851af 2023-10-18), built on 2024.01.26-07:47:09
这个可以帮我们快速掌握这个二进制的信息。
实现
我们可以通过rust自带的特殊方案,构建build.rs,在编译时将我...
golang中进行类型转换时避免GC产生
背景
golang为了简洁性和易用性,在一些常用的使用方式上是有一定的性能损耗的。
例如将一个函数从[]byte转换成string,这个是一个很常见的需求,比如我们需要读取一个文件的内容并保存成一个字符串:
buf, err := os.ReadFile("file.txt")
if err != nil {
panic(err)
}
res := string(buf)
上述代码在将结果从[]byte转换成string时,是会进行内存分配和拷贝的,因此就会涉及到了GC。积少成多,也是会一定程度影响程序的性能的。
因此需要考虑,有没有一种重新解释(reinterpret cast)的方法,直接将[]byte转换成string,而避免中间过程的内存操作呢?
做法
以下...
30 post articles, 5 pages.