博客

A collection of 82 posts
博客

Docker研究文档

Docker研究文档 综述 Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。 Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。 容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。 Docker 从 17.03 版本之后分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版),我们用社区版就可以了。 详细内容 安装 windows https://docs.docker.com/desktop/windows/install/
阅读时间 16 分钟
博客

docker、docker-compose、docker swarm和k8s的区别

docker、docker-compose、docker swarm和k8s的区别 Docker Docker 这个东西所扮演的角色,容易理解,它是一个容器引擎,也就是说实际上我们的容器最终是由Docker创建,运行在Docker中,其他相关的容器技术都是以Docker为基础,它是我们使用其他容器技术的核心。 Docker-Compose Docker-Compose 是用来管理你的容器的,有点像一个容器的管家,想象一下当你的Docker中有成百上千的容器需要启动,如果一个一个的启动那得多费时间。有了Docker-Compose你只需要编写一个文件,在这个文件里面声明好要启动的容器,配置一些参数,执行一下这个文件,Docker就会按照你声明的配置去把所有的容器启动起来,只需docker-compose up即可启动所有的容器,但是Docker-Compose只能管理当前主机上的Docker,也就是说不能去启动其他主机上的Docker容器 Docker Swarm Docker Swarm 是一款用来管理多主机上的Docker容器的工具,可以负责帮你启动容器
阅读时间 3 分钟
博客

并行计算

并行计算 目前公开文献可查到比较早提出的定义是Gottlieb等人在1989年《高性能计算》一书中给出的。Gottlieb等认为:并行计算是一种计算类型,其中许多计算或计算过程的执行是同时执行的。 并行计算的目的是加快计算速度。我国学者张林波在其编写的教材《并行计算导论》中对并行计算进行了描述性定义:并行计算(parallel computing)是指,在并行机上,将一个应用分解成多个子任务,分配给不同的处理器,各个处理器之间相互协同,并行地执行子任务,从而达到加速求解速度,或者求解应用问题规模的目的。 如图1所示,通俗而言,并行计算是一种计算体系结构,其中多个处理器同时执行从一个较大的复杂问题中分解出来的多个、较小的计算任务。近年来并行计算已成为计算机体系结构中的主要范例,主要以多核处理器的形式出现。 1.1 并行计算的三个基本条件 根据并行计算的定义,并行计算必须具备三个基本条件: (1)并行机。并行机至少包含两台或两台以上处理机,这些处理机通过互连网络相互连接,相互通信。 (2)应用问题必须具有并行度。也就是说,应用可以分解为多个子任务,这些子
阅读时间 8 分钟
博客

CMakeLists - Option

CMakeLists - Option CMake中的option用于控制编译流程,相当于C语言中的宏条件编译 1. option option(<variable> "<help_text>" [value]) * variable:定义选项名称 * help_text:说明选项的含义 * value:定义选项默认状态,一般是OFF或者ON,除去ON之外,其他所有值都为认为是OFF。 option 依赖控制 cmakelist add_definitions() 用来定义项目的宏 2. function function的定义格式如下:后面可作为命令供调用 function(<name> [<arg1> ...]) <commands> endfunction() 其中name是function的名字,
阅读时间 3 分钟
博客

cmake 技术研究

cmake 技术研究 综述 CMake是个一个开源的跨平台自动化建构系统,用来管理软件建置的程序,并不依赖于某特定编译器,并可支持多层目录、多个应用程序与多个库。 它用配置文件控制建构过程(build process)的方式和Unix的make相似,只是CMake的配置文件取名为CMakeLists.txt。CMake并不直接建构出最终的软件,而是产生标准的建构档(如Unix的Makefile或Windows Visual C++的projects/workspaces),然后再依一般的建构方式使用。这使得熟悉某个集成开发环境(IDE)的开发者可以用标准的方式建构他的软件,这种可以使用各平台的原生建构系统的能力是CMake和SCons等其他类似系统的区别之处。 CMake配置文件(CMakeLists.txt)可设置源代码或目标程序库的路径、产生适配器(wrapper)、还可以用任意的顺序建构可执行文件。CMake支持in-place建构(二进档和源代码在同一个目录树中)和out-of-place建构(二进档在别的目录里),因此可以很容易从同一个源代码目录树中建构出多个
阅读时间 4 分钟
博客

cmake-buildsystem研究

cmake-buildsystem研究 综述 详细内容 cmake的构建系统是基于逻辑层上的构造目标的,基本的构造目标有: 可执行文件,库。 由此cmake的基本指令有: add_excutable() // 可执行文件 add_library() // 库 add_excutable() add_executable(<name> [WIN32] [MACOSX_BUNDLE] [EXCLUDE_FROM_ALL] [source1] [source2 ...]) 通过add_exectuable()可以用于添加可执行文件的目标,在以前的版本中,add_exectuable()必须 加上所涉及的源文件,当前的cmake版本有target_sources()指令,可以在之后来添加相关的源文件。 <name>必须全局独特。 可执行文件的生成目录默认在add_executable()执行的目录。 当然可以通过RUNTIME_OUTPUT_
阅读时间 5 分钟
博客

cmake技术文档

cmake技术文档 综述 Note: cmake没有删除生成文件的的命令,只能手动删除生成的文件。 在power shell下可以用rm -r * 变量取值符号为${WHH_PROJECT} 详细内容 cmake命令行用法 cmake命令行命令如下: cmake [<options>] {<path-to-source> | <path-to-existing-build>} cmake [{-D <var>=<value>}...] -P <cmake-script-file> cmake --build <dir> [<options>...] [-- <build-tool-options>...] cmake --open
阅读时间 14 分钟
博客

深度学习与计算机视觉

深度学习与计算机视觉 目录 * 简介 * 深度学习 * M-P模型 * 感知机 * 多层感知机 * 神经网络 * 激活函数 * 损失函数 * 优化函数 * 反向传播 * 深度学习框架 * 机器视觉 * 参考文献 简介 《列子·汤问》中周穆王巡狩,遇到一个自愿献艺的工匠叫做偃师。这个工匠制造的歌舞艺人行走坐卧宛若真人,甚至会挑逗周穆王的嫔妃,周穆王大怒,将歌舞艺人拆卸后仅为假物。 这个在我们现在看来就是机器人,其自主行为便是我们研究的人工智能(AI - artificial intelligence) 为了达到这一目标,从上世纪起人们尝试了多种方法。 * AI许多早期的成功发生在相对朴素且形式化的环境中,而且不要求计算机具备很多关于世界的知识。例如,IBM的深蓝(Deep Blue)国际象棋系统在1997年击败了世界冠军Garry Kasparov(Hsu,2002)。 * 知识库(Knowledge base)方法 - 致力于将关
阅读时间 34 分钟
博客

深度学习与计算机视觉

深度学习与计算机视觉 目录 * 简介 * 深度学习 * M-P模型 * 感知机 * 多层感知机 * 神经网络 * 激活函数 * 损失函数 * 优化函数 * 反向传播 * 深度学习框架 * 机器视觉 * 参考文献 简介 《列子·汤问》中周穆王巡狩,遇到一个自愿献艺的工匠叫做偃师。这个工匠制造的歌舞艺人行走坐卧宛若真人,甚至会挑逗周穆王的嫔妃,周穆王大怒,将歌舞艺人拆卸后仅为假物。 这个在我们现在看来就是机器人,其自主行为便是我们研究的人工智能(AI - artificial intelligence) 为了达到这一目标,从上世纪起人们尝试了多种方法。 * AI许多早期的成功发生在相对朴素且形式化的环境中,而且不要求计算机具备很多关于世界的知识。例如,IBM的深蓝(Deep Blue)国际象棋系统在1997年击败了世界冠军Garry Kasparov(Hsu,2002)。 * 知识库(Knowledge base)方法 - 致力于将关
阅读时间 34 分钟
博客

Triton

triton 1.简介 NVIDIA Triton™ Inference Server 简化了生产中的大规模 AI 模型部署。Triton 是一款开源的推理服务软件,可助力团队从任何框架、本地存储或从任何基于 GPU 或 CPU 的基础架构、云、数据中心或边缘的 Google Cloud 平台或 AWS S3 中部署经过训练的 AI 模型。通过从 NVIDIA NGC™ 目录中拉取容器开始使用 Triton,该目录是经 GPU 优化的深度学习和机器学习软件中心,可加速向开发工作流程的部署。 1.1 Triton Inference Server 的优势 多框架 支持 Triton Inference Server 支持 TensorFlow、
阅读时间 38 分钟
博客

ONNX

ONNX ONNX - Open Neural Network Exchange ONNX是一种用于机器学习模型构建的开源格式。ONNX定义了一套通用操作以及一个通用格式,使得用户能够使用多种框架、工具以及编译器来运行模型。 深度学习算法大多通过计算数据流图来完成神经网络的深度学习过程。 一些框架(例如CNTK,Caffe2,Theano和TensorFlow)使用静态图形,而其他框架(例如 PyTorch 和 Chainer)使用动态图形。 但是这些框架都提供了接口,使开发人员可以轻松构建计算图和运行时,以优化的方式处理图。 这些图用作中间表示(IR),捕获开发人员源代码的特定意图,有助于优化和转换在特定设备(CPU,GPU,FPGA等)上运行。 ONNX 的本质只是一套开放的 ML 模型标准,模型文件存储的只是网络的拓扑结构和权重(其实每个深度学习框架最后保存的模型都是类似的),脱离开框架是没办法对模型直接进行 inference的。 现在很多的深度学习框架提供的功能都是类似的,但是在 API、计算图和 runtime 方面却是独立的,这就给 AI
阅读时间 9 分钟
博客

NVIDIA

nvidia 显卡驱动、cuda与cudnn之间的区别 cuda是NVIDIA推出的自家GPU的并行计算框架。 注意事项:NVIDIA的显卡驱动器与CUDA并不是一一对应的哦,CUDA本质上只是一个工具包而已,所以我可以在同一个设备上安装很多个不同版本的CUDA工具包,比如我的电脑上同事安装了 CUDA 9.0、CUDA 9.2、CUDA 10.0三个版本。一般情况下,我只需要安装最新版本的显卡驱动,然后根据自己的选择选择不同CUDA工具包就可以了,但是由于使用离线的CUDA总是会捆绑CUDA和驱动程序,所以在使用多个CUDA的时候就不要选择离线安装的CUDA了,否则每次都会安装不同的显卡驱动,这不太好,我们直接安装一个最新版的显卡驱动,然后在线安装不同版本的CUDA即可。 总结:CUDA和显卡驱动是没有一一对应的。 cuDNN是一个SDK,是一个专门用于神经网络的加速包,注意,它跟我们的CUDA没有一一对应的关系,即每一个版本的CUDA可能有好几个版本的cuDNN与之对应,但一般有一个最新版本的cuDNN版本与CUDA对应更好。 总结:cuDNN与CUDA没有一一对
阅读时间 6 分钟
博客

Graph RAG

graph rag 简介 1. Knowledge Graph Graph RAG 中的 Graph 指的是知识图谱 —— Knowledge Graph:一个用来表示实体及其相互关系的结构化图形数据模型。 在 Graph 中,节点(Nodes) 代表实体如人、地点、事件等;边(Edges)则代表这些实体之间的关系,(如人物关系、地理位置等)。 GraphRAG 中,实体和关系以图的形式存储在图数据库(graph database) 中, 作为 RAG pipeline 的一部分。 1. 知识的两种表示方法:Vectors & Graphs 从人的视角,向量的视角,以及 Graph 的视角,来看一个“苹果: 人对“
阅读时间 11 分钟
博客

Hermes Agent: 开源、自进化、多模态多平台AI代理框架

Hermes Agent: 开源、自进化、多模态多平台AI代理框架 摘要 随着大规模语言模型(LLM)的快速发展,AI 代理(AI Agent)已成为将语言模型能力转化为实际生产力的关键范式。本文深入探讨 Hermes Agent —— 由 Nous Research 开发的开源 AI 代理框架。Hermes Agent 突破了传统 AI 代理的局限,提出了一种技能驱动自改进机制,使得代理能够通过经验积累不断提升任务处理能力。同时,其多平台消息网关架构实现了跨 15+ 通讯平台的无缝部署,而模型无关设计则确保了与 20+ LLM 提供商的兼容性。实验表明,Hermes Agent 在软件工程、系统管理、数据分析和内容创作等多元任务场景中展现了显著优势。本文旨在为 AI 代理系统的研究与实践提供系统性的分析与参考。 关键词:AI 代理;
阅读时间 15 分钟
博客

长视频理解

长视频理解 详细 VideoRAG^1 VideoRAG 是一种用于长视频理解的检索增强生成(Retrieval-Augmented Generation)技术。它通过提取视频中的视觉对齐辅助文本,帮助大型视频语言模型(LVLMs)更好地理解和处理长视频内容。 具体来说,VideoRAG 使用开源工具从视频数据中提取音频、文字和对象检测等信息,将这些信息作为辅助文本与视频帧和用户查询一起输入到现有的 LVLM 中。这种方法计算开销低,易于实现,能与任何 LVLM 兼容。在多个长视频理解基准测试中,VideoRAG 展现出了显著的性能提升。 VideoRAG 的主要功能 检索增强生成:通过检索增强生成(RAG)技术,VideoRAG 能从长视频中提取与用户查询相关的辅助文本,帮助模型更好地理解和生成响应。 多模态信息提取:基于开源工具(如 EasyOCR、Whisper 和 APE),VideoRAG 从视频中提取多种类型的辅助文本,包括光学字符识别(OCR)、自动语音识别(ASR)
阅读时间 4 分钟
博客

rkwv 微调

rkwv 微调 简介 为什么要微调 RWKV 模型? 目前开源发布的 RWKV 模型均为基底模型(base model ,又称预训练模型),基底模型在自然语言处理等领域的大规模数据集上进行了训练,具备较强的泛化能力和丰富的知识储备。 但为了保持泛化能力和通用性,RWKV 基底模型并未针对某一类任务作优化。因此,RWKV 模型在某些特定任务上的表现可能不够理想。 而对 RWKV 模型进行微调,通俗地说,指的是使用特定领域(如法律、文学、医学等)或任务(材料总结、小说续写等)的高质量数据集对 RWKV 模型进行再次训练。微调过的 RWKV 模型在对应任务的表现会更高质量且稳定。 相比于从头训练一个全新的模型,微调只需要调整预训练模型的参数就能达到满意的任务效果,需要的训练周期和计算资源更少。 综上所述,我们可以通过微调 RWKV 模型优化其在各种任务中的表现,从而快速构建基于 RWKV 模型的应用场景和落地应用。 我需要为微调训练准备什么? 要微调 RWKV
阅读时间 9 分钟
博客

RWKV

RWKV 简介 RWKV(读作 RWaKuV)是一种具有 GPT 级大型语言模型(LLM)性能的 RNN,也可以像 GPT Transformer 一样直接训练(可并行化)。 RWKV 结合了 RNN 和 Transformer 的最佳特性:出色的性能、恒定的显存占用、恒定的推理生成速度、"无限" ctxlen 和免费的句嵌入,而且 100% 不含自注意力机制。 RWKV 项目最初由彭博(Bo Peng ,BlinkDL)提出,随着项目被外界关注,RWKV 项目逐渐发展成一个开源社区。 2023 年 9 月 20 日,RWKV 开源项目正式加入
阅读时间 39 分钟
博客

RAG

rag 检索增强生成(Retrieval-augmented Generation),简称RAG,是当下热门的大模型前沿技术之一 ^1。 检索增强生成模型结合了语言模型和信息检索技术。具体来说,当模型需要生成文本或者回答问题时,它会先从一个庞大的文档集合中检索出相关的信息,然后利用这些检索到的信息来指导文本的生成,从而提高预测的质量和准确性。 历史沿革 2020年,Facebook AI Research(FAIR)团队发表名为《Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks》的论文,。该篇论文对RAG概念进行详细介绍和解释。 起初,Naive RAG 遵循传统过程 Indexing-Retrieval-Generation,也被称为 “Retrieve-Read” 框架。 之后,Advanced RAG 提高检索质量,采用了检索前和检索后策略(pre-retrieval and post-retrieval strategies)。为了解决索引问题,Advanced RAG 通过使用
阅读时间 14 分钟
博客

MCP协议

MCP协议 MCP 是一个标准化协议,旨在通过提供结构化的上下文管理来增强大型语言模型(LLMs)与应用程序之间的交互。 介绍 MCP (Model Context Protocol) 是一个开放协议,用于标准化应用程序如何向 LLM 提供上下文。可以将 MCP 想象成 AI 应用程序的 USB-C 接口。就像 USB-C 为设备连接各种外设和配件提供标准化方式一样,MCP 为 AI 模型连接不同的数据源和工具提供了标准化的方式。 为什么选择 MCP? MCP 帮助您在 LLM 之上构建代理和复杂工作流。LLM 经常需要与数据和工具集成,而 MCP 提供: * 预构建集成列表,您的 LLM 可以直接接入 * 在不同 LLM 提供商和供应商之间切换的灵活性 * 在您的基础设施中保护数据的最佳实践 从本质上讲,MCP
阅读时间 24 分钟
博客

llama.cpp

llama.cpp llama.cpp 是一个专为大型语言模型(LLMs)设计的 高性能开源推理引擎 ,由开发者 Georgi Gerganov 基于 C/C++ 实现。它通过底层优化技术,实现在多种硬件(包括消费级设备)上高效运行大模型,尤其适合本地化部署场景。 llama.cpp 是一个库,可以基于其进行开发。 核心定位与功能 * 高效推理引擎 * 专注于将 Meta 的 LLaMA 系列模型(如 LLaMA-1/2/3)及其他开源大模型(如 Mistral、Falcon)转化为可在本地硬件运行的推理服务。 * 支持 单轮文本生成 、 多轮对话 、 流式输出 (逐 Token 返回结果)等基础功能。 * 硬件兼容性 * 跨平台支持
阅读时间 6 分钟
博客

多模态大语言模型

多模态大语言模型^1 2023 年 3 月,GPT-4 的发布标志着大语言模型首次支持视觉模态输入,赋予其理解图像并生成相关自然语言内容的能力[65]。一年后,2024 年 5 月推出的 GPT-4o 更进一步,实现了文本、图像和语音等多模态信息的深度融合,使 ChatGPT 转型为具备实时语音对话能力的数字个人助理。GPT-4o 在视觉和语音交互方面表现尤为突出,能够查看用户上传的屏幕截图、照片、文档或图表,并基于这些内容与用户展开对话。大规模预训练范式不仅在语言模型领域取得了突破性成功,也显著推动了视觉模型和语音模型在音视频编码、多模态感知等领域的发展。近年来,多模态预训练架构逐渐统一到基于 Transformer 的框架之下,大大促进了大语言模型与其他模态模型之间的深度交互与融合,也使得多模态大语言模型成为研究的前沿热点。 本章将重点介绍多模态大语言模型基础、多模态大语言模型架构、多模态大语言模型训练策略以及应用实践。 多模态大语言模型基础 人们日常处理的数据不仅限于文本内容(例如对话、文章、指令等语言信息的表达形式),还包含视觉模态(如图像、视频、图表等视觉数
阅读时间 80 分钟
博客

强化学习

强化学习^1 通过有监督微调,大语言模型已初步具备遵循人类指令并完成多类型任务的能力。然而该方法存在显著局限:首先需要构建海量指令-答案对数据集,高质量回复标注需耗费高昂人力成本;其次交叉熵损失函数要求模型输出与标准答案逐字匹配,既无法适应自然语言的表达多样性,也难以解决输出对输入微小变动的敏感性,这在需要深度推理的复杂任务中尤为突出。 当前大语言模型中的强化学习技术主要沿着两个方向演进:其一是基于人类反馈的强化学习(Reinforcement Learning from Human Feedback,RLHF),通过奖励模型对生成文本进行整体质量评估,使模型能自主探索更优的回复策略,并使得模型回复与人类偏好和价值观对齐。典型如 ChatGPT 等对话系统,通过人类偏好数据训练奖励模型,结合近端策略优化(Proximal Policy Optimization,PPO)算法实现对齐优化。其二是面向深度推理的强化学习框架,以 OpenAI 的 O 系列模型和 DeepSeek的 R 系列为代表,通过答案校验引导模型进行多步推理。这类方法将复杂问题分解为长思维链(Chain-of-
阅读时间 79 分钟
博客

指令微调

指令微调^1 指令微调又称有监督微调,是指在预训练大语言模型的基础上,通过使用有标注的自然语言形式的数据,对模型参数进行微调,使模型具备指令遵循(Instruction Following)能力,能够完成各类预先设计的任务,并可以在零样本情况下处理诸多下游任务。经过海量数据预训练后的语言模型虽然具备了大量的“知识”,但是由于其训练时的目标仅是进行下一个词的预测,因此不能够理解并遵循人类自然语言形式的指令。为了使模型具有理解并响应人类指令的能力,还需要使用指令数据对其进行调整。如何构造指令数据,如何高效低成本地进行指令微调训练,以及如何在语言模型基础上进一步扩大上下文等问题,是大语言模型在指令微调阶段的核心。 本章先介绍大语言模型指令微调训练方法,在此基础上介绍高效模型微调及模型上下文窗口扩展方法,最后介绍指令微调的代码实践。 指令微调训练 指令微调具体训练过程并不复杂,主要分为如下三个步骤:(1)针对每一项任务去明确地定义相应的自然语言形式的指令或者提示,这些指令或提示对任务目标以及输出要求进行清晰描述;(2)把训练数据调整成包含指令以及与之对应的响应的形式;(3)使
阅读时间 68 分钟
博客

分布式训练

分布式训练^1 随着大语言模型参数量和所需训练数据量的急速增长,单个机器上有限的资源已无法满足其训练的要求。需要设计分布式训练系统来解决海量的计算和内存资源需求问题。在分布式训练系统环境下,需要将一个模型训练任务拆分成多个子任务,并将子任务分发给多个计算设备,从而解决资源瓶颈。如何才能利用数万个计算加速芯片的集群,训练千亿甚至万亿参数规模的大语言模型?这其中涉及集群架构、并行策略、模型架构、内存优化、计算优化等一系列的技术。 本章将介绍分布式机器学习系统的基础概念、分布式训练的并行策略、分布式训练的集群架构,并以 DeepSpeed 为例,介绍如何在集群上训练大语言模型。 分布式训练概述 分布式训练(Distributed Training)是指将机器学习或深度学习模型训练任务分解成多个子任务,并在多个计算设备上并行训练。图4.1 给出了单个计算设备和多个计算设备的示例,这里计算设备可以是中央处理器(Central Processing Unit,CPU)、图形处理器(Graphics Processing Unit,GPU)、张量处理器(Tensor Process
阅读时间 60 分钟
苏ICP备19018690号-1