显存计算
了解大模型的显存占用在大型语言模型(LLM)领域,经常看到”7B”、”13B”、”70B”这样的参数规模描述,这些数字直接关系到模型运行所需的显存资源。对于开发者、研究人员和AI应用部署者来说,准确计算模型显存需求是: 硬件采购的基础 部署方案设计的依据 模型选择的关键因素 性能优化的起点 本文将系统性地解析大模型显存占用的计算方法,包括全精度加载和量化加载的不同场景。 一、基础概念:模型参数与显存的关系1.1 参数量的表示方法 1B参数 = 10亿(1,000,000,000)个参数 常见模型规模: 7B (70亿,如Llama 2-7B) 13B (130亿,如Llama 2-13B) 70B (700亿,如Llama 2-70B) 1.2 参数数据类型与显存占用现代大模型通常使用以下数据类型: 数据类型 位数 字节数 常见用途 FP32 32 4 全精度训练 FP16 16 2 混合精度训练/推理 BF16 16 2 训练(动态范围更大) INT8 8 1 量化推理 INT4 4 0.5 极端量化 二、全量加载显...
RAG-Chonkie实践理解分块
在构建高效的检索增强生成(RAG)系统时,**文本分块(Chunking)**是决定系统性能的关键预处理步骤。今天我们将深入探讨文本分块的重要性,并详细解析Chonkie库提供的五种分块方法,帮助开发者选择最适合自己场景的分块策略。 一. 为什么文本分块如此重要?在RAG流程中,分块是数据预处理的核心环节,直接影响: 检索精度:过大的块会引入噪声,过小的块丢失上下文。 生成质量:LLM需要连贯的上下文理解用户查询。 计算效率:合理分块减少无效计算。 错误分块的典型问题 案例1:将“巴黎是法国的首都。柏林是德国的首都”切分为: Chunk1: “巴黎是法国的首都。柏林” Chunk2: “是德国的首都”→ 检索“德国首都”时可能漏检Chunk1。 案例2:将一篇学术论文的“方法论”和“结论”合并为一个块→ 检索具体方法细节时引入无关信息。 二、Chonkie的五种分块方法详解1. TokenChunker:基于token的分块原理:按照固定的token数量分割文本 特点: 与LLM的token处理方式直接对应 保持每个块的token长度一致 可能破坏句子完整性 适...
docker-compose与k8s对比
在现代容器化生态中,Docker Compose 和 Kubernetes(K8S) 是两个最常用的编排工具,但它们的设计目标和适用场景截然不同。本文将深入分析它们的异同、优劣势及互补关系,帮助你做出合理的技术选型。 1. 核心定位对比Docker Compose:轻量级单机编排 定位:定义和运行多个关联容器(如 Web + DB + Cache)。 适用场景: 本地开发环境 单机测试部署 快速原型验证 Kubernetes:企业级分布式编排 定位:管理跨多节点的大规模容器集群。 适用场景: 生产环境微服务架构 高可用、自动伸缩需求 混合云/多云部署 类比: Docker Compose 像“乐高说明书”,指导如何组装一组容器。 Kubernetes 像“智能机器人流水线”,自动管理全球工厂的乐高生产。 2. 功能对比 功能 Docker Compose Kubernetes 部署单元 容器组(Services) Pod(1个或多个容器) 伸缩能力 手动(docker-compose up -...
docker-如何在容器内使用显卡资源
1. 为什么需要 NVIDIA Container Toolkit?在 Docker 中运行深度学习、AI 计算或图形渲染应用时,通常需要调用 GPU 加速。但默认情况下,Docker 容器无法直接访问宿主机的 NVIDIA 显卡,这时就需要 NVIDIA Container Toolkit(原名 nvidia-docker)来打通容器与 GPU 之间的桥梁。 核心功能 允许 Docker 容器直接访问宿主机上的 NVIDIA GPU。 自动挂载 GPU 驱动和 CUDA 库到容器内。 兼容主流容器运行时(Docker、containerd、Podman)。 2. NVIDIA Container Toolkit 组件解析该工具包主要由以下组件构成: 组件名称 作用 nvidia-container-toolkit 核心组件,负责在容器启动时注入 GPU 相关设备与驱动。 libnvidia-container 底层库,处理容器与 GPU 的交互逻辑。 nvidia-container-runtime 替换 Docker 默认的 runc,支持 GPU 设...
docker-在线安装docker脚本
这里直接给出脚本内容,脚本内容中已经包含了添加阿里云镜像源的步骤,直接运行即可。 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162#!/bin/bash# 在线安装 Docker 脚本(使用阿里云镜像源)# 适用于 Ubuntu 系统# 检查脚本是否以 root 用户运行if [[ $EUID -ne 0 ]]; then echo "该脚本需要以 root 用户运行!" exit 1fiecho "正在确认安装curl命令"apt-get install curl -y# 检查是否已安装 Dockerif command -v docker &>/dev/null; then echo "检测到系统中已安装 Docker。" read -p "是否需要卸载并重新安装 Docker? [y/N]...
docker与k8s的异同
容器化技术已经成为现代云计算和DevOps的核心组成部分,而 Docker 和 Kubernetes(K8S) 是其中最重要的两个工具。很多人对它们的定位和关系感到困惑: Docker 负责什么? Kubernetes 又负责什么? 它们的网络模型有何不同? 本文将从 架构定位、核心功能、网络模型 三个方面深入对比,帮助你彻底理解二者的关系与差异。 1. Docker 与 Kubernetes 的定位与关系(1) Docker:单机容器运行时 核心功能: 创建、运行和管理单个容器(应用打包与隔离)。 提供镜像构建(Dockerfile)和分发(Docker Hub)。 适用场景: 本地开发、测试环境。 单机部署简单应用。 (2) Kubernetes:容器编排系统 核心功能: 管理多个容器化应用的部署、伸缩、负载均衡。 自动化运维(自愈、滚动更新、服务发现)。 适用场景: 生产环境的大规模集群管理。 微服务架构(数百个容器的协同)。 类比理解: Docker 像是一台“集装箱卡车”,负责单个容器的运输。...
doc与docx的历史
在 Linux 系统上处理 Microsoft Word 文档时,我们经常会遇到两种格式:.doc 和 .docx。由于兼容性问题,有时需要将旧版 .doc 转换为 .docx 才能正常编辑。本文将详细介绍这两种格式的历史、区别,并讲解如何使用 LibreOffice 进行转换。 1. DOC 与 DOCX 的历史与区别(1) DOC 格式(1990s–2007) 诞生:DOC 是 Microsoft Word 的专有二进制格式,最早随 Word 1.0(1983)推出,并在 Word 97–2003 成为主流。 特点: 二进制存储(不可直接阅读)。 文件体积较大(未优化压缩)。 兼容性问题较多(不同 Word 版本可能显示不同)。 现状: 已淘汰,但仍有一些旧文档使用。 (2) DOCX 格式(2007–至今) 诞生:DOCX 是 Microsoft Office 2007 引入的 Office Open XML (OOXML) 格式,现为 Word 默认格式。 特点: 基于 XML(结构化文本,可解压查看内容)。 采用 ZIP 压缩,文件更小。 兼容性更好(支持现...
打包与压缩
在软件开发、数据备份和文件传输中,我们经常会遇到各种归档和压缩格式,如 ZIP、TAR、TAR.GZ、RAR、7Z 等。这些格式有些是纯打包,有些是纯压缩,有些则是打包+压缩的组合。本文将详细解析它们的区别、适用场景及优缺点。 1. 基础概念:打包 vs 压缩在讨论具体格式之前,先明确两个核心概念: 打包(Archiving):将多个文件或目录合并成一个文件,但不进行压缩。特点:保留文件结构、权限、元数据,但文件大小不变。典型格式:TAR、CPIO。 压缩(Compression):通过算法减少文件体积,但不涉及多文件管理。特点:文件变小,但通常只能压缩单个文件(除非先打包)。典型格式:GZ、BZ2、XZ、ZSTD。 关键区别: 打包 = 合并文件(如 tar) 压缩 = 减小体积(如 gzip) 打包+压缩 = 先打包再压缩(如 tar.gz) 2. 常见归档/压缩格式详解(1) 纯打包格式TAR (Tape Archive) 特点: Unix/Linux 标准打包工具,仅合并文件,不压缩。 保留...
包装函数的一些用法
在 Python 开发中,经常会遇到需要对函数进行扩展或修改其行为的情况,但又不希望直接修改函数本身的代码。这时,包装函数(也称为装饰器)就派上了大用场。它是一种非常优雅且强大的工具,能够以一种简洁的方式增强函数的功能。 一、包装函数的基本概念包装函数本质上是一个返回函数的高阶函数。它接收一个函数作为参数,对其进行包装,然后返回一个新的函数。通过使用 @ 符号,可以很方便地将包装函数应用到目标函数上。 在 Python 中,通常使用 functools.wraps 来保留被包装函数的元信息(如函数名、文档字符串等),以确保在使用装饰器后,函数的这些信息不会丢失。 二、应用场景:系统参数与用户参数的结合代码示例中,包装函数被用来解决一个非常实用的问题:当系统中需要调用一个函数时,这个函数的参数既包括用户提供的参数,也包括系统配置的参数。如果直接在每次调用时手动添加这些参数,代码会变得冗长且难以维护。而通过使用包装函数,可以将系统参数封装起来,让用户在调用时只需传入自己的参数即可。 12345678910111213141516171819202122232425from funct...
使用python进行mysql数据迁移
Alembic是一个数据库管理工具,用于管理数据库迁移。它允许你创建、应用和撤销数据库迁移,以便在数据库结构发生变化时保持版本控制。任何有关数据库变动都需要使用这个库来进行操作。这是一个python库,版本已经记录在项目下的requirements.txt文件当中。 新增字段操作如下在使用 Alembic 进行数据库迁移时,你需要通过 Alembic 的迁移脚本来实现对表结构的修改,同时确保原始数据不会被删除。以下是基于你的需求,使用 Alembic 添加一个新字段 usr_id 并设置默认值为 0 的详细步骤: 1. 初始化 Alembic 环境如果你还没有初始化 Alembic,需要先在项目中初始化它: 1alembic init alembic 这会在项目中创建一个 alembic 文件夹,其中包含 Alembic 的配置文件和迁移脚本模板。 2. 配置 Alembic编辑 alembic.ini 文件,确保其中的 sqlalchemy.url 配置正确指向你的数据库: 1sqlalchemy.url = mysql+pymysql://username:password@...














