基于 ChatGLM3-6B 的微调实践
因为一些特殊的原因需要使用到大模型,然后便尝试微调清华大学开源的大模型ChatGLM3-6B,本文记录之。
ChatGLM3是智谱AI和清华大学 KEG 实验室联合发布的新一代对话预训练模型。详细文档参考ChatGLM3官网仓库。
环境
硬件
CPU
8C
内存
32G
GPU
NVIDIA V100 *1(16G)
系统
ubuntu22.04
软件
pytorch2.1.0
tensorflow2.14.0
tensorflow-gpu==2.8.0
Python3.10
cu118
ChatGLM3 部署下载仓库12git clone https://github.com/THUDM/ChatGLM3cd ChatGLM3
安装依赖1pip install -r requirements.txt
下载模型因为众所周知的原因,国内从Hugging Face下载模型会相当慢,所以我们选择从国内的modelscope下载。
1git clone https://www.modelscope.cn/ZhipuAI/chatglm3-6 ...
基于 cert-manage 对阿里云域名自动签发 TLS(https) 证书
概述使用 HTTPS 需要向权威机构申请证书,并且需要付出一定的成本,如果需求数量多,则开支也相对增加。 cert-manager 是 Kubernetes 上的全能证书管理工具,支持利用 cert-manager 基于 ACME 协议与 Let's Encrypt 签发免费证书并为证书自动续期,实现永久免费使用证书。
工作原理
证书签发Let's Encrypt 是一个非营利性的证书颁发机构(Certificate Authority,简称 CA),旨在提供免费的 SSL/TLS 证书,以帮助网站和网络应用实现加密通信。SSL/TLS 证书是一种数字证书,用于加密数据传输以确保数据在客户端和服务器之间的安全性和隐私性。通过使用 SSL/TLS 证书,网站可以实现 HTTPS 连接,从而保护用户的数据免受窃听和篡改的威胁。
以下是 Let's Encrypt 的一些关键特点和信息:
免费证书: Let's Encrypt 提供免费的 SSL/TLS 证书,使网站所有者能够轻松地将其网站升级为安全的 HTTPS 连接,无需支付昂贵的证 ...
Chapter One Of Learn LangChain 快速入门
安装依赖1pip install langchain
环境设置使用LangChain通常需要与一个或多个模型提供者、数据存储、API等集成。在下面的示例中,我们将使用OpenAI的模型 API。
安装 openapi 依赖包1pip install openai
设置环境通过接口访问OpenAI需要一个密钥,你可以通过创建一个账户然后绑定支持的信用卡(需要美国信用卡)就可以生成自己的密钥了, 点击进入 OpenAI API Keys 管理,参见下图:
123import osos.environ["OPENAI_API_KEY"] = "..."
如果你不想设置环境变量,可以在初始化OpenAI的LLM时,直接通过名为openai_api_key的参数传递秘钥
123from langchain.llms import OpenAIllm = OpenAI(openai_api_key="...")
构建应用程序LangChain提供了许多可用于构建语言模型应用程序的模块,模块可以在简单的应用程序中独立使用,也可以 ...
Chapter Zero Of Learn LangChain
LangChain是什么LangChain是一个强大的框架,旨在帮助开发人员使用语言模型构建端到端的应用程序。它提供了一套工具、组件和接口,可简化创建由大型语言模型 (LLM) 和聊天模型提供支持的应用程序的过程。
简单来说,可以理解LangChain相当于开源版的LLM插件,它提供了丰富的大语言模型工具,支持在开源模型的基础上快速增强模型的能力。LangChain可以轻松管理与语言模型的交互,将多个组件链接在一起,并集成额外的资源,例如 API 和数据库。
LangChain有哪些模块LangChain为以下模块提供标准的、可扩展的接口和外部集成。
Model I/O
任何语言模型应用程序的核心都是模型,LangChain提供了与任何语言模型交互的构建模块。
Prompt
模板化、动态选择和管理模型输入
Language models
通过通用接口调用语言模型
Output parsers
从模型输出中提取信息
Data connection
许多LLM需要访问用户特殊数据,但这部分数据不属于集群训练的一部分,LangChain提供了通过加载,转换,存储 ...
kube-prometheus-stack usage
Environment
Kubernetes 集群
需要一个已经部署完成且可用的Kubernetes 1.16+集群。
Helm
helm version v3+
Steps
添加 helm 仓库
12helm repo add prometheus-community https://prometheus-community.github.io/helm-chartshelm repo update
将仓库拉取到本地
1helm pull prometheus-community/kube-prometheus-stack
将拉取到的压缩包解压
12345678910tar -zxvf kube-prometheus-stack-45.8.1.tgz # kube-prometheus-stack/Chart.yaml# kube-prometheus-stack/Chart.lock# kube-prometheus-stack/values.yaml# kube-prometheus-stack/templates/NOTES.txt# kube-prometheu ...
浅析 IPVS
TODOTODOTODOTODO
Linux OS 的 Init 和 Systemd
什么是 Init 守护进程Init守护进程是Linux内核执行的第一个进程,它的进程ID(PID)始终是1,它的目的是初始化、管理和跟踪系统服务和守护进程,也就是说init deamon(Init 守护进程)是系统上所有进程的父进程。
什么是 InitInit(也被称为System V init或者SysVinit),它是一个初始化守护进程,创建于 1980 年。它定义了6个运行级别(系统状态)并将所有的系统服务映射到这些运行级别。这使得所有服务都会以预定义的顺序启动,只有当顺序中的当前脚本执行完成或者卡主超时时才会执行下一个脚本。除了执行超时导致无法预期的等待之外,串行的启动服务也会使得系统初始化过程效率低下且相对较慢。
什么是 SystemdSystemd(system daemon)是现代系统使用的init守护进程,它并行的启动系统服务,从而消除不必要的延迟并加快初始化进程。systemd通过使用Unit Dependencies来定义一个服务是否想要/需要依赖其他服务才能运行,使用Unit Order来定义一个服务是否需要在它之前/之后启动。可以使用syst ...
使用 Kubeadm 部署 Kubernetes 集群(基于 Containerd 运行时)
基础知识CRI、Containerd、OCI、runcCRICRI(Container Runtime Interface)是Kubernetes定义的接口,定义了如何操作容器和镜像的统一规范。Kubernetes 尽量不关心您使用哪个容器运行时。 它只需要能够向它发送指令——为Pod创建容器、终止它们等等。 这就是CRI的用武之地。CRI 是对现在或将来可能存在的任何类型的容器运行时的抽象。 所以 CRI 让 Kubernetes 更容易使用不同的容器运行时。 CRI API描述了Kubernetes如何与任何运行时交互,而不是Kubernetes项目需要单独添加对每个运行时的支持。 只要给定的容器运行时实现了CRI API,运行时就可以随心所欲地创建和启动容器。
Containerdcontainerd是一个来自Docker的高级容器运行时,并实现了CRI规范。它是从Docker项目中分离出来,之后containerd被捐赠给云原生计算基金会(CNCF)为容器社区提供创建新容器解决方案的基础。
所以Docker自己在内部使用containerd,当你安装Docker时也会安装co ...
Kubernetes 集群部署之网段划分
Kubernetes 集群部署会涉及到如下三个网段
宿主机网段
准备安装 Kubernetes 集群的服务器的内网网段
POD 网段
Kubernetes 中部署的 POD 的网段
Service 网段
Kubernetes 中部署的 Service 的网段
需要注意的的是在部署Kubernetes的时候,这三个网段之间不能有任何的交叉。比如,如果宿主机的网段是172.16.168.135/12,那么Service或Pod的网段就不能在172.16.0.1~172.31.255.254之间。
所以一般的推荐是,三个网段的第一位就不要重复,比如宿主机的网段如果是172开头,那么Service和Pod就不要用172打头的网段,这样不近可以避免网段冲突,还可以减去计算的步骤。
A 类地址子网掩码最小为8B 类地址子网掩码最小为16C 类地址子网掩码最小为24
为了方便POD数量的扩展,应该给POD设置B类或A类地址,因为C类最多只有254个可用IP。
使用 Fluentd + ElasticSearch 搭建 docker stdout 日志解决方案
整体架构如下图,容器产生的 stdout 日志通过 Fluentd 分发到 ElasticSearch 的不同索引,然后通过 Kibana 进行可视化查询、搜索等。
部署ElasticSearch & Kibana笔者使用的是docker-compose方式部署的 ES 集群和 Kibana,参考文件如下:
目录结构12345>ls -aldrwxr-xr-x 2 root root 4096 9月 18 14:45 .drwxr-xr-x 7 root root 4096 9月 15 14:50 ..-rw-r--r-- 1 root root 7956 9月 16 14:18 docker-compose.yaml-rw-r--r-- 1 root root 776 9月 16 13:43 .env
.env 配置文件内容123456789101112131415161718192021222324252627282930# 此处为 elastic 用户设置密码,至少6个字符ELASTIC_PASSWORD=# 此处设置kibana密码KIBANA_PA ...