大模型

大模型 PreTraining 预训练 预训练(pre-training)是指在一个较小的、特定任务的数据集上进行微调(fine-tuning)之前,在一个大数据集上训练一个模型的过程。这个初始训练阶段允许模型从数据中学习一般的特征和表征,然后可以针对具体任务进行微调。 微调方法 SFT 监督微调 在一个预训练的基础上,通过提供标注好的数据进行进一步训练,以使模型在特定任务或领域表现得更好。 PEFT-lora 轻量化微调 全量微调需要数据很大,所以需要轻量化微调,即只微调模型的一部分,以使模型在特定任务或领域表现得更好。 实际是通过低秩矩阵相乘,减少微调参数量。(低秩:参数的相关性小,低秩矩阵相乘后,参数量减少很多) 数据冗余:当矩阵的行或列之间存在高度冗余时,比如在一些数据集中,多个特征(列)可能高度相关,或者多个观测(行)几乎相同。 信息重复:在某些情况下,矩阵的不同部分可能包含重复的信息,导致整个矩阵可以通过较少的数据来描述。 固有维度低:在许多实际问题中,尽管数据在表面上看似高维(例如图像、文本数据),其真实的“固有维度”却可能相对较低,因为数据点可能聚集在低维的流形上。 缺失或不完整的数据:在处理不完整或缺失数据时,通过低秩矩阵近似可以是恢复或估计缺失条目的一种有效方法。 RLHF-DPO 教会大模型语法格式 RLHF:使用强化学习技术,需要训练奖励模型,然后通过策略梯度等方法优化语言模型。 DPO:直接使用静态离线数据集优化模型参数,无需单独的奖励模型。 模型蒸馏 模型蒸馏是一种将大型模型的知识迁移到小型模型的技术,在不损失有效性的情况下实现模型压缩。以下是模型蒸馏的一些优化技术:

February 11, 2025

ElasticSearch 进阶 收集k8s日志

ElasticSearch 角色 节点类型 节点作用 节点配置参数 默认值 master node 是一个主节点,负责创建删除索引等操作,开启后即所有的节点都可以竞选主节点,主节点存在的位置,也被称为是一个事务角色层 node master true data node 数据节点,用来存储 master 节点存储的数据的节点,处理数据相关的节点,用来处理数据的 CRUB 操作,对数据进行聚合、搜素,数据节点的操作大部分是 I/O 操作 node data true ingest node 提取节点,具有数据预处理的能力,可以拦截 Index 的请求,可以对数据进行转换,所有的节点都是 Ingest Node node ingest true Coordinating Node 协调节点,负责接收客户端的请求,然后发送到合适的节点,并且会将节点返回的数据汇聚到一起返回给客户端,也就是说会是一个前台,用来接收用户的请求,进行分配,起到了路由的作用,并且要清楚后端 master shards 的位置 无 设置 master data ingest 全为 false Maching Leanning Node 机器学习节点,用于运行作业和一些处理机器学习 API 请求 node ml true 需要 enable x-pack kubernetes logs 传统日志管理系统工作架构 通过日志收集器,例如 filebeat 在节点上收集日志,然后发送给 Centralized log management system,例如 elasticsearch 进行存储,再通过 web ui 的窗口显示。日志管理的功能,再 log collector 中会进行日志的收集,日志的聚合,日志的切割,日志的存储,最终实现日志的传输,传入到 centralized log management system 集中式日志系统,实现用户基于 lucene 搜索引擎进行搜索。 ...

December 30, 2020

ElasticSearch 生态基础

存储系统分类 非结构化存储,存储为文件格式,例如日志的文件 NFS Block 输出出来并没没有文件锁,RDB(Ceph分布式复制块设备) Filesystem NFS HDFS(Hadoop Filesystem)需要了解一下分布式文件系统 半结构化存储,有特定格式,但是在 schema 上并没有很严格的要求,例如自带字段和数据的,也就是 key:v ,也可以进行逐级嵌套, 称为 NoSQL Database k/v(键值对格式) redis tikv Document(文档存储) MongoDB,ElasticSearch Colume Family:Hadoop Database 是运行在 Hadoop 上的 HBase GraphDB(图示存储):Neo4j TSDB(时序存储) 结构化存储,必须要存储到结构中,schema 要求严格,TiDB(兼容 MySQL 协议,原生分布式) 老家伙能够存留下来的原因,主要是因为数据强一致性,也就是 ACID 事务的支持 数据的热区会集中在某些表或者是库中 请求路由机制,需要了解整个分布式的地图,当然当用户发起写操作,那么就会通过这个请求路由分发,但是这种方式会导致读取数据比较麻烦。 ElasticSearch 与其他的半结构化存储不同的是,elasticsearch 提供了一个查询的 API 接口,是以搜索引擎闻名,多维度的存储系统。可以存储文本以及 k/v 数据。是一个文本存储的数据库,并且必须要序列化称为 json 的格式,且在 elasticsearch 的任意节点都可以查询到该文本数据。 端口作用 9300/tcp Cluster Peer 是提供集群服务 9200/tcp Client API 是提供给客户端的 elasticsearch 插件 通过 elasticsearch-plugin 工具来获取插件,默认会通过网络找到指定的插件。 例如 elasticsearch 的管理界面,也就是会展示 elasticsearch 的索引 type 等,原生不支持 head。 ...

December 29, 2020

Docker 资源管理

1. docker system命令 在谁用光了磁盘?Docker System命令详解中,我们详细介绍了docker system命令,它可以用于管理磁盘空间。 docker system df命令,类似于Linux上的df命令,用于查看Docker的磁盘使用情况: docker system df TYPE TOTAL ACTIVE SIZE RECLAIMABLE Images 147 36 7.204GB 3.887GB (53%) Containers 37 10 104.8MB 102.6MB (97%) Local Volumes 3 3 1.421GB 0B (0%) Build Cache 0B 0B 可知,Docker镜像占用了7.2GB磁盘,Docker容器占用了104.8MB磁盘,Docker数据卷占用了1.4GB磁盘。 docker system prune命令可以用于清理磁盘,删除关闭的容器、无用的数据卷和网络,以及dangling镜像(即无tag的镜像)。docker system prune -a命令清理得更加彻底,可以将没有容器使用Docker镜像都删掉。注意,这两个命令会把你暂时关闭的容器,以及暂时没有用到的Docker镜像都删掉了…所以使用之前一定要想清楚吶。 执行docker system prune -a命令之后,Docker占用的磁盘空间减少了很多: docker system df TYPE TOTAL ACTIVE SIZE RECLAIMABLE Images 10 10 2.271GB 630.7MB (27%) Containers 10 10 2.211MB 0B (0%) Local Volumes 3 3 1.421GB 0B (0%) Build Cache 0B 0B 2. 手动清理Docker镜像/容器/数据卷 对于旧版的Docker(版本1.13之前),是没有docker system命令的,因此需要进行手动清理。这里给出几个常用的命 删除所有关闭的容器 ...

November 17, 2020

Docker 小架构

实验介绍 拓扑图如下 实现目标 实现开发人员通过推送代码到 gitlab,然后通过与 jenkins 建立的函数钩子,触发构建 docker compose 并提交到 docker harbor 镜像仓库中。最后触发 ansible-playbook 控制宿主机从 docker harbor 中拉取镜像并部署代码上线。 此环境应该应用于测试环境中。 主机规划 主机名 作用 拓扑图对应名称 IP centos7_10 宿主机 host3 192.168.1.10 centos7_11 compose ansible jenkins host2 192.168.1.11 centos7_12 gitlab host1 192.168.1.12 centos7_13 docker-harbor host4 192.168.1.13 centos7_14 开发人员 user 192.168.1.14 实验步骤 编写 dockerfile 并测试对应效果 配置 gitlab 配置 jenkins 配置 docker-harbor 实现结合 准备 DOCKER-COMPOSE 文件 创建目录结构 [root@centos7_10 compose]# tree . ├── docker-compose.yml └── web 编写 lap 架构 编写 dockerfile ...

November 16, 2020

Docker Docker Compose

Docker Compose 简介 运行多容器的 Docker 应用程序的工具。通常用于容器编排,以实现一键搭建 lamp 这样的功能。使用的是 yaml 格式的文本文件。 使用 Compose 的步骤 使用 Dockerfile 定义应用程序的环境 使用 docker-compose.yml 定义构成应用程序的服务 执行 docker-compose up 命令来运行并启动编排内容 使用 Compose 构建和运行应用 启动应用程序 docker-compose up 如果你想在后台执行该服务 docker-compose up -d yml 配置指令 version 指定 yml 依从的 compose 版本 build 指定构建镜像上下文路,也就是指定 dockerfile 文件的路径 version: "3.7" services: webapp: build: ./dir 作为具有在上下文指定的路径的对象,可选的 Dockerfile 和 args version: "3.7" services: webapp: build: context: ./dir dockerfile: Dockerfile-alternate args: buildno: 1 labels: - "com.example.description=Accounting webapp" - "com.example.department=Finance" - "com.example.label-with-empty-value" target: prod context:上下文路径。 dockerfile:指定构建镜像的 Dockerfile 文件名。 args:添加构建参数,这是只能在构建过程中访问的环境变量。 labels:设置构建镜像的标签。 target:多层构建,可以指定构建哪一层。 cap_add,cap_drop 添加或者删除容器拥有的宿主机的内核功能 ...

November 15, 2020

Docker 私有registry

Docker Registry 分类 Sponsor Registry 第三方的 Registry,提供给客户和 Docker 社区使用 Mirror Registry 第三方的 Registry,只提供给客户使用 Vendor Registry 由发布 Docker 镜像的提供上提供的 Registry Private Registry 通过设有防火墙和额外的安全层的私有实体提供的 registry Registry 的应用 如果公司将服务器托管到了阿里云或者其他拥有 docker 仓库的平台,那么直接使用即可。 如果公司将服务器在本地使用,那么就可以在本地建有一个 registry 来提供存储镜像及其他应用。 Registry 的作用 用来存储镜像,使用 registry 时使用存储卷,将存储卷挂载即可。默认为docker 管理的卷,可以使用自定义的绑定卷进行绑定。 搭建 registry Registry 的安装 centos 自带的版本,使用 info 命令查看出的版本 0.9 版本,安装后版本为 2.6.2 版本。 info 命令查看的是仓库中已有软件包的最低版本。 软件包名为 docker-distribution 但是安装使用 docker-registry 来安装 docker-registry 默认是使用 http 来监听并通信的,但是 docker 客户端默认使用的是 https 协议,所以会出现不兼容。 相关软件包 [root@centos7_10 ~]$ rpm -ql docker-distribution /etc/docker-distribution/registry/config.yml #主配置文件 /usr/bin/registry #二进制执行文件 /usr/lib/systemd/system/docker-distribution.service #启动服务文件 /usr/share/doc/docker-distribution-2.6.2 /usr/share/doc/docker-distribution-2.6.2/AUTHORS /usr/share/doc/docker-distribution-2.6.2/CONTRIBUTING.md /usr/share/doc/docker-distribution-2.6.2/LICENSE /usr/share/doc/docker-distribution-2.6.2/MAINTAINERS /usr/share/doc/docker-distribution-2.6.2/README.md /var/lib/registry #私有仓库中存储的镜像位置 主配置文件详解 /etc/docker-distribution/registry/config.yml version: 0.1 log: fields: service: registry #指定服务名称 storage: cache: layerinfo: inmemory filesystem: rootdirectory: /var/lib/registry #指定镜像存储位置 http: addr: :5000 #指定监听的端口 查看启动服务后监听端口的地址 ...

November 15, 2020

Docker 资源限制

Docker 资源限制的必要性 默认情况下,docker container 在运行时,只要系统分配多少资源,那么这个容器就会使用多少。 控制的维度,只有内存和 CPU,并且内存是非可压缩的,但是 CPU 是可压缩的。 并且资源的限制依赖于 capabilities 这个 capabilities 是在内核中进行资源限制的功能模块。 OOME 一旦发生 OOME,任何进程都有可能被杀死,包括 docker daemon 在内。 为此,Docker 特地调整了 docker daemon 的 OOM 优选级,以免被内核杀死,但是容器的优选级并未被调整。 可压缩与非可压缩资源 内存的资源是非可压缩的,因为内存本身就是一个缓存,所以并不可以压缩,如果内存负载过大,会造成 OOM。 CPU 的资源是可压缩的,并且 CPU 资源也有队列一说,所以当 CPU 负载过大时会导致进程进入阻塞状态,也就是进入等待处理的状态。 限制的范围 可以达到的效果 可以限制内存的使用量 可以限制内存的使用率,就是通过内存的使用率进行划分 通过限制 CPU 的核心数进行限制,限制核心数时,会将资源公平分配。 通过 CPU 绑定限制固定进程的核心数,绑定核心数时会只让单个或指定核心数运行此容器,其他核心数不会使用。(使用此绑定方法时,不要使用 cpu0)因为系统的默认就是 cpu0,如果将容器绑定到 cpu0,那么会导致 CPU 超载。 禁止 OOM 也就是让进程不会因为内存的满载而删除该容器,但是其他容器还是会删除,也可以通过优先级进行限制不让内存删除 可以通过软限制和硬限制进行限制容器的运行,软限制是限制容器的运行占用情况,硬限制会直接限制容器运行占用的资源,容器可以超过软限制,但是不能超过硬限制。 通过内存进行限制 -m ,–memory= 容器可以使用的最大物理内存量,硬限制,此选项最小允许值为 4m (4 MB),此项较常用 –memory-swap * 允许此容器交换到磁盘的内存量,必须先用-m 对内存限制才可以使用 –memory-swappiness 设置容器使用交换分区的倾向性,值越高表示越倾向于使用swap分区,范围为0-100,0为能不用就不用,100为能用就用 –memory-reservation 允许指定小于 –memory 的软限制 ,当 Docker 检测到主机上的争用或内存不足时会激活该限制,如果使– memory-reservation,则必须将其设置为低于 –memory 才能使其优先生效。 因为它是软限制,所以不能保证容器不超过限制 ...

November 15, 2020

Docker Dockerfile

制作镜像的方式 基于容器进行制作 使用 docker commit 命令制作镜像 使用 Dockerfile 制作 编辑 Dockerfile 文件并执行来制作镜像 Dockerfile 简介 只是一个纯文本文件,文本中记录了很多指令。 Dockerfile Format Format # Comment INSTRUCTION arguments 指令本身并不区分大小写,但是规范中使用者必须要使用大写。 Docker 是顺序执行的指令,是自上而下执行的 第一个非注释行必须要为 FROM 指令,FROM 指令用来指定基础镜像。 Dockfiler 文件执行 执行环境 必须定义一个执行目录,且 Dockerfile 文件中定义的文件和安装包都需要在这个工作目录中。 可以在该工作目录的子目录,但是不可以在父目录之上。 Dockeringore 该文件也是一个文本文件,称为排除列表,会排除文件中定义的文件。 作用 例如再 Dockerfile 文件中定义了一个目录,但是目录中的有一些文件不需要复制,所以就要可以使用 dockeringore 来定义一些忽略的文件,包括 dockeringore 文件本身。 Docker build 命令的执行逻辑 与另一种就是启动一个容器制作镜像的动作相同,只不过该命令是隐式执行一个容器,并不是在前台执行。 在后端执行的命令与前台执行无异。 在 Dockerfile 中执行的镜像的命令,是要制作基础镜像的命令,并不是宿主机的命令,所以在 Dockerfile 中定义时,必须要使用基础镜像中有的命令。 Environment replacement 该环境变量并不是定义的宿主机或或者是镜像中的环境变量,而是定义的 Dockerfile 文件中定义的环境变量。 高级变量赋值 ${variable:-word} 如果 variable 变量没有赋值,那么引用时就是引用的变量后的内容。 ${variable:+word} variable 为空那么返回为空,如果 variable 不为空那么返回为 word ...

November 13, 2020

Docker 存储卷

写时复制功能 Docker 镜像是由多个只读层叠加而成,启动容器时,Docker 会加载只读镜像层并在镜像栈顶部调价一个读写层。 如果运行中的容器被修改了数据,那么将会在这一层之上新建一个读写层并覆盖,但是该只读文件依旧存在,只是被新建的制度层覆盖了,并不会删除。 删除情况,对上层用户将不再显示,会在这个文件上添加删除的标志,当 Docker 识别到后将不会显示给用户。 修改情况,会让文件中修改的数据重新生成一个文件并覆盖该文件的被修改的数据。 新建情况,会在新的只读层中新建一个文件并显示给用户。 这些情况被统称为 ”写时复制“ 云计算的概念 通过让每个主机上的 Container 容器挂载宿主机上的目录,但是主机上的目录挂载的是后台存储上的共享目录,从而达到资源共享,然后让容器可以在不同主机之间可以迁移。 形成容器集群且可以来回切换。 查看容器的存储分层 数据目录分层 lowerdir:image 镜像层,即镜像的本身,只读 upperdir:容器的上层,可读写,容器变化的数据存放在此处 mergeddir:容器的文件系统,使用 Union FS(联合文件系统)将 lowerdir 和 upperdir 合并完成后容器使用,最终呈现给用户的统一视图 workdir:容器在宿主机的工作目录,挂载后会被清空,且在使用过程中其内容用户不可见 Volume 卷的概念 容器存在的数据问题 关闭或重启容器,其数据不会受到影响;但是删除 Docker 容器,其更改将会全部丢失。 存储在自己独立的存储空间中,与宿主机共享数据共享不便。 容器之间的共享数据不便。 删除容器后,容器正在运行的数据会丢失。 Volume 卷简介 将宿主机的文件系统挂载到容器中,让容器与宿主机共享存储空间,这样可以让宿主机与容器共享数据。 可以让多个容器同时挂载一个 Volume 卷,这样就可以让不同的容器进行共享数据。 此类目录可以绕过联合文件系统。 volume 于容器初始化之时即会创建,由 base image 提供的卷中的数据会于此期间完成复制。 volume 的初衷是独立于容器的声明周期实现数据的持久化,因此删除容器时即不会删除卷,也不会对哪怕未被引用的卷做垃圾回收。 volume 的运行逻辑 卷为 Docker 提供了独立于容器的数据管理机制 卷实现了程序和数据的分离,以及程序和制作镜像的主机分离,用户制作镜像时无敌徐再考虑镜像运行的容器所在的主机的环境。 当共享存储卷挂载到容器上后,那么当用户写入向容器中的卷写入数据时相当于直接写入到文件中。 当用户直接向容器中的根目录写入数据时会产生一个读写层,提供读写写入。 应用场景 当 docker 运行 httpd 时会将站点目录指定到 volume 卷上,共享主机的卷。其他产生的临时数据放置到容器的读写层中,这样当容器运行完成删除后,一些站点目录还是存在的,但是一些临时产生的数据将会删除。 ...

November 12, 2020