Search Posts

分类: 大模型

理解和运行大模型的本地离线训练、运行流程

帮助初学者理解和运行大模型的本地离线训练、运行流程:

大模型在本地离线运行的流程通常包括以下几个步骤:

  1. 下载训练代码:首先,你需要下载相关的训练代码。通常,大模型的训练代码会在开源的代码库中进行维护,你可以通过GitHub等平台搜索到相应的代码。

  2. 准备环境:在运行代码之前,你需要确保你有相应的环境来支持模型的运行。这包括正确配置Python环境、安装相应的依赖库以及GPU驱动等。

  3. 下载模型数据文件:大模型通常需要预训练的权重文件作为输入。你可以通过官方的提供的链接或者其他渠道下载这些模型数据文件,并保存到本地。

  4. 修改配置:有些大模型的代码会提供一个配置文件,你需要根据自己的需求对配置文件进行修改。配置文件中包括了输入输出文件路径、超参数等设置,你可以根据实际情况进行修改。

  5. 运行代码:根据具体的代码说明,你需要运行相应的命令来启动模型的训练或推理过程。在运行之前,确保你已经正确设置好模型数据文件的路径和其他配置项。

综上所述,要在本地离线训练大模型,你需要下载训练代码、准备环境、下载模型数据文件、修改配置、运行代码。这个流程可能因模型的不同而有所差异,但基本思路是相通的。

如何使用训练好的模型得到输出?

下面是使用已训练好的模型进行推理的一般步骤:

  1. 加载模型:使用相应的深度学习框架(如TensorFlow、PyTorch等),加载已训练好的模型权重文件。通常可以通过指定模型的名称或文件路径来加载模型。

  2. 数据预处理:将输入数据进行预处理,使其与训练数据具有相同的格式和表示。这可能包括词向量化、标准化、缩放或其他必要的数据处理步骤。

  3. 推理过程:根据模型的类型和任务,使用加载的模型对输入数据进行推理。这涉及将输入数据传递给模型,并获取模型的输出结果。

  4. 后处理:根据任务的需求,对模型的输出进行后处理。例如,对于分类任务,可以应用一个阈值来确定最终的类别标签。

  5. 获取输出结果:根据需要,将模型的输出结果格式化为可读的文本、图像、数值等形式,并返回给用户或保存到文件中。

需要注意的是,每个具体模型和任务的实现方式可能有所不同,所以以上步骤需要根据具体的模型和任务进行调整。你可以查阅相关模型的文档或参考例子来了解更详细的使用方法。… 查看余下内容

python机器学习报错 libcufft.so.11: cannot open shared object file: No such file or directory 的问题复现和解决记录

关键报错信息:

libcufft.so.11: cannot open shared object file: No such file or directory

或类似的动态库缺失的报错。

完整报错信息:

Traceback (most recent call last):
  File "/root/miniconda3/envs/mypy38/lib/python3.8/site-packages/torch-2.1.1-py3.8-linux-x86_64.egg/torch/__init__.py", line 174, in _load_global_deps
    ctypes.CDLL(lib_path, mode=ctypes.RTLD_GLOBAL)
  File "/root/miniconda3/envs/mypy38/lib/python3.8/ctypes/__init__.py", line 373, in __init__
    self._handle = _dlopen(self._name, mode)
OSError: libcufft.so.11: cannot open shared object file: No such file or directory

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "main.py", line 1, in 
    from simcse import SimCSE
  File "/root/SimCSE/simcse/__init__.py", line 1, in 
    from .tool import SimCSE
  File "/root/SimCSE/simcse/tool.py", line 5, in 
    import torch
  File "/root/miniconda3/envs/mypy38/lib/python3.8/site-packages/torch-2.1.1-py3.8-linux-x86_64.egg/torch/__init__.py", line 234, in 
    _load_global_deps()
  File "/root/miniconda3/envs/mypy38/lib/python3.8/site-packages/torch-2.1.1-py3.8-linux-x86_64.egg/torch/__init__.py", line 195, in _load_global_deps
    _preload_cuda_deps(lib_folder, lib_name)
  File "/root/miniconda3/envs/mypy38/lib/python3.8/site-packages/torch-2.1.1-py3.8-linux-x86_64.egg/torch/__init__.py",
查看余下内容

rust+Qt+PaddleOCR 实现的OCR桌面软件示例

功能效果

基于paddleOCR 的图片文字识别(OCR)桌面软件,使用Rust+QT开发。

带调试界面的运行效果:

src/ocr.rs 文件的来源:

安装 ruic 工具,https://github.com/jnbooth/ruic
然后

cd src/
ruic.exe -o uic.rs --all mainwindow.ui

就会得到src/uic.rs 。目前已包含 src/uic.rs 文件,所以无需执行上述 ruic 命令。

注意:

  1. ruic.exe 对 QT5 的Line 类 不支持。需要将uic.rs中重复的声明和 Line 相关的声明删掉。
  2. 编译环境要求:qt 5.14.0或低于该版本的qt。windows 10系统。rust qt在windows下的环境要求在有 msvc 编译器的环境,
    所以建议使用:打开【适用于 VS 2017 的 x64 本机工具命令提示】后cd到项目目录下进行cargo 操作。
  3. 在cargo build 之前,要确保按照 【PaddleOCR-json\说明.txt】 文件的要求放置好 PaddleOCR-json 的文件。
  4. main.rs 中 pub type OcrResult = Vec<Root>; 等代码参考了 https://gitee.com/toobo/PaddleOCRRust/blob/master/src/entity.rs ,在此向toobo( ZHao )表示感谢!感谢 PaddleOCR-json 项目

如何编译:

由于技术栈基于 Rust + Qt 5.14.0 + paddleOCR(C++),所以需要借助一些rust crate库实现。编译过程已通过build.rs 脚本进行了一键封装。

编译测试版

cargo build

编译生产版

cargo build --release

授权协议

Apache-2.0

rust+Qt 的其他项目:

  1. 使用 Rust + Qt 开发的仿有道词典的翻译 + 词典 工具.
  2. rust-qt的官方 examples

结论:

使用QT+Rust开发,主要是练手希望熟悉Rust,以及验证rust-qt的成熟度+OCR软件功能的MVP验证。

  1. 关于成熟度:QT C++能支持的功能,rust-qt也支持(目前rust-qt官方支持QT5.14.0 及以下版本的QT,提供了qt_core 、qt_gui、qt_widgets、 qt_ui_tools 等核心模块的crate库)。
  2. 关于开发效率: 对于熟悉Rust的人员,采用rust-qt的开发效率也可以很高,因为UI可以拖拽然后用 ruic 工具生成rust代码(参考 https://github.com/kerneltravel/rust_qt_gui_paddle_ocr_example
查看余下内容

从本地文件直接加载llama/llama 2/中文llama 的大语言模型的方法

从本地直接加载已有的大语言模型文件,用命令方式或python编程方式从本地直接加载模型文件,适合于模型文件已下载到本地的情况,或者模型文件已随软件一起打包的情况、docker容器化部署的情况,也适用Chinese-Llama-2-7b,可避免部署运行时每次重新联网下载huggingface上的模型的麻烦。

介绍两种方法实现:

  • 命令方式从本地文件直接加载llama/llama 2/中文llama 的大语言模型:
    参考 链接

    1. 在本地编译得到 llama.cpp 的可执行文件(main)后,通过main 加载本地模型文件。
      linux下的编译 + 加载模型的命令为:
      git clone https://github.com/ggerganov/llama.cpp;
      cd llama.cpp && make -j && ./main -m ./models/7B/ggml-model-q4_0.bin -p "Building a website can be done in 10 simple steps:" -n 512
  • 编程方式从本地文件直接加载llama/llama 2/中文llama 的大语言模型:

    1. 安装准备工作:
      pip install llama-cpp-python

      对 mac系统的支持、以及让llama.cpp支持使用 OpenBLAS / cuBLAS / CLBlast / Metal 作为后端的设置方法,可参考 链接

    2. 编程实现
      from llama_cpp import Llama
      llm = Llama(model_path="./models/7B/ggml-model.bin")
      output = llm("Q: Name the planets in the solar system? A: ", max_tokens=32, stop=["Q:", "\n"], echo=True)
      print(output)

      输出结果:

      "id": "cmpl-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
      "object": "text_completion",
      "created": 1679561337,
      "model": "./models/7B/ggml-model.bin",
      "choices": [
      {
      "text": "Q: Name the planets in the solar system?
查看余下内容

大语言模型如何合并与转换其他模型得到新的完整模型文件

本文介绍了LoRA与原版Llama-2合并得到完整模型的流程本文介绍了LoRA与原版Llama-2合并得到完整模型的流程。本操作属于手动转换(离线转换模型的方式),用于生成不同格式的模型,以便进行量化或进一步精调。本文来源于:中文LLaMA-2 & Alpaca-2大语言模型 Chinese-LLaMA-Alpaca-2 项目的wiki页面 manual_conversion_zh

手动模型合并与转换

以下介绍了手动将LoRA与原版Llama-2合并得到完整模型的流程。如网络带宽充足,建议直接下载完整版模型。

准备工作

  1. 运行前确保拉取【中文LLaMA-2 & Alpaca-2大语言模型 Chinese-LLaMA-Alpaca-2】仓库最新版代码:git pull https://github.com/ymcui/Chinese-LLaMA-Alpaca-2
  2. 确保机器有足够的内存加载完整模型(例如7B模型需要13-15G)以进行合并模型操作
  3. 安装依赖库(项目根目录requirements.txt):
$ pip install -r requirements.txt

Step 1: 获取原版Llama-2-hf模型

原版Llama-2-hf地址:https://huggingface.co/meta-llama/Llama-2-7b-hf

HF格式模型相关文件(可以不用下载safetensors格式模型权重):

config.json
generation_config.json
pytorch_model-00001-of-00002.bin
pytorch_model-00002-of-00002.bin
pytorch_model.bin.index.json
special_tokens_map.json
tokenizer_config.json
tokenizer.json
tokenizer.model

Step 2: 合并LoRA权重,生成全量模型权重

这一步骤会合并LoRA权重,生成全量模型权重。此处可以选择输出PyTorch版本权重(.pth文件)或者输出HuggingFace版本权重(.bin文件)。执行以下命令:

$ python scripts/merge_llama2_with_chinese_lora_low_mem.py \
    --base_model path_to_original_llama2_hf_dir \
    --lora_model path_to_chinese_llama2_or_alpaca2_lora \
    --output_type huggingface \
    --output_dir path_to_output_dir 

参数说明:

  • --base_model:存放HF格式的Llama-2模型权重和配置文件的目录
  • --lora_model:中文LLaMA-2/Alpaca-2 LoRA解压后文件所在目录,也可使用🤗Model Hub模型调用名称(会自动下载)
  • --output_type:指定输出格式,可为pthhuggingface。若不指定,默认为huggingface
  • --output_dir:指定保存全量模型权重的目录,默认为./
  • (可选)--verbose:显示合并过程中的详细信息
查看余下内容

如何在 PaddleOCR 中设置使用 GPU/CPU计算能力?

paddlepaddle的paddleOCR在安装配置阶段,要选对下载的版本,才能支持GPU模式,否则默认支持的是CPU模式

要在 PaddleOCR 中使用 GPU,您需要遵循几个步骤:

  1. 安装 PaddlePaddle 的 GPU 版本: 确保已安装 PaddlePaddle 的 GPU 版本,其中包括 CUDA 和 cuDNN 支持。你可以按照 PaddlePaddle官方的这个文档中提供的说明进行安装。注意选择对应的CUDA版本、操作系统版本、安装渠道等。

  2. 检查 GPU 可用性: 确保 PaddlePaddle 能正确识别你的 GPU。你可以运行以下代码片段来检查PaddlePaddle是否能检测到你的GPU:

import paddle
gpu_available  = paddle.device.is_compiled_with_cuda()
print("GPU available:", gpu_available)
如果输出为 True,则表示 PaddlePaddle 已检测到 GPU。
  1. 在 PaddleOCR 中设置 use_gpu 标志:在代码或配置文件中,确保将 use_gpu 标志设置为 True,以启用 GPU 的使用。例如,如果您使用的是 PaddleOCR API,可以这样设置:
from paddleocr import PaddleOCR
ocr = PaddleOCR(use_gpu=True)
如果使用配置文件,请在配置文件中将 use_gpu 标志设置为 true。
  1. 在推理过程中检查 GPU 的使用情况: 使用 PaddleOCR 执行推理时,可以使用 nvidia-smi(用于英伟达™(NVIDIA®)GPU)等工具或其他 GPU 监控工具监控 GPU 的使用情况。这将帮助你验证 GPU 是否在推理过程中被使用。

如果您已按照上述步骤操作,但仍遇到 PaddleOCR 使用 CPU 而非 GPU 的问题,则可能是其他因素导致了该问题。请确保您的系统环境和依赖项已正确设置为使用 GPU,并仔细检查是否安装了支持 GPU 的 PaddlePaddle。此外,检查 PaddleOCR 初始化或推理过程中的任何错误信息或警告,因为它们可能提供更多有关问题的信息。… 查看余下内容

【kerneltravel原创】机器学习的paddleOCR的项目经过pyinstaller打包后可执行文件启动报错的原因和解决方式

pyinstaller打包的基于paddleOCR的可执行文件启动报错

很多人的图片转文字功能都采用 paddleOCR项目,为了发布给用户使用,往往要借助pyinstaller等打包工具。使用pyinstaller打包paddleOCR为可执行后,很多开发者遇到,可执行文件启动报错:未找到模块。

网友kerneltravel 综合分析了多个issue和pyinstaller的报错信息后,找到这个问题的原因,并给出了解决方法,同时向paddleOCR官方提交了修复代码(见 PR1PR2 ),以PR2 为准。

下面对这个问题做具体分析:

问题表现:

  1. 打包后,paddleocr应用启动报错信息1:

    Traceback (most recent call last):
    File "main.py", line 5, in
    File "PyInstaller\loader\pyimod02_importers.py", line 385, in exec_module
    File "paddleocr_init_.py", line 14, in
    File "PyInstaller\loader\pyimod02_importers.py", line 385, in exec_module
    File "paddleocr\paddleocr.py", line 33, in
    File "importlib_init_.py", line 126, in import_module
    ModuleNotFoundError: No module named 'tools'
    [11752] Failed to execute script 'main' due to unhandled exception!
  2. 启动报错信息2:

    raceback (most recent call last):
    File "yes .py",line 1, in 
    File"PyInstaller\loader pyimod02 importers.py", line 385,in exec moduleFileFile"paddleocrinit .py",line 14,in 
    File"pyInstaller loader pyimod02 importers.py", line 385,in exec module
    File"paddleocr\paddleocr.py",line 34,in 
    File"importlib\ init .py",line 127,in import module
    ModuleNotFoundError: No module named"ppocr'
    [23216] Failed to execute script 'yes' due to unhandled exception!
查看余下内容

提高大型语言模型LLM对于复杂自然语言任务的学习和执行能力的一种思路:RLHF

基于RLHF提升LLM对于复杂自然语言任务的学习和执行能力

RLHF(Reinforcement Learning based Hierarchical Framework),即基于强化学习的分层框架。这种框架结合了强化学习和分层学习的思想,旨在提高智能系统对于复杂任务的学习和执行能力。

LLM(Large Language Model 即大型语言模型),是一种基于机器学习的自然语言处理技术,用于生成自然语言文本或完成自然语言理解任务。

将强化学习的分层框架(RLHF)应用于大型语言模型的研究,这个思路旨在提高大型语言模型对于复杂自然语言任务的学习和执行能力。

现有的哪些研究项目是基于将RLHF应用于LLM的:

基于 RLHF 应用于 LLM 的研究还比较新颖,目前可能还没有太多相关的研究成果。但是,近年来有许多研究探索了将强化学习应用于自然语言处理领域,这些研究可能对于基于 RLHF 应用于 LLM 的研究提供一些启示。

以下是一些基于强化学习应用于自然语言处理领域的研究,可能与基于 RLHF 应用于 LLM 的研究相关:

  • "open-assistant.io": 这个项目处于研发的初期阶段, 目前正参照现有研究将 RLHF 应用于 LLM。

  • "Learning to Communicate with Deep Multi-Agent Reinforcement Learning":这项研究探索了使用深度多智能体强化学习来训练语言模型,使其能够进行自然语言交流。

  • "Dialogue Management with Hierarchical Deep Reinforcement Learning for Conversational Systems":这项研究使用分层深度强化学习来构建对话管理器,用于处理人机对话中的多轮交互。

  • "A Deep Reinforcement Learning Framework for the Financial Portfolio Management Problem":这项研究探索了使用深度强化学习来解决金融投资组合管理问题,其中包括对自然语言数据的处理。

这些研究可能与基于 RLHF 应用于 LLM 的研究有一定的相关性,但也需要更多的研究来探索 RLHF 在 LLM 中的应用。… 查看余下内容

大模型概念中的向量、向量数据库、向量检索、embeddings、实际应用示例

什么是向量数据库

再搞清楚这个问题之前,先需要知道什么是向量(vector)。

什么是向量

在AI领域中,向量是一个具有大小和方向的数学对象。它可以用来表示现实世界中的各种事物,例如图像、语音、文本等。

在机器学习和深度学习中,向量通常被用作表示数据的形式,其中每个向量的维度代表了不同的特征或属性。例如,在图像分类任务中,一个图像可以被表示为像素值组成的向量;在自然语言处理任务中,一句话可以被表示为单词嵌入(word embeddings)组成的向量。通过对这些向量进行计算和比较,机器可以从数据中提取出有用的信息,如相似性、聚类等。

拿比如人脸识别技术来说,计算机从照片或视频中提取出人脸的图像,然后将人脸图像转换为128维或者更高维度的向量。说到向量,就离不开embeddings。下面说下embeddings是什么。

什么是embeddings

embeddings是一个相对低维度的空间,可以将高维向量转换为低维度。embeddings使得在大型输入上搞机器学习更加容易,例如表示单词的稀疏向量。最理想的情况是,embeddings能够通过将语义上相似的输入放置在embeddings空间中彼此靠近来捕获输入的某些语义。可以在不同的模型中学习和重复使用嵌入。

这里有一个之前学习过的Google出品的机器学习的课程可以参考:课程网址

什么是向量检索

向量搜索是一种使用机器学习模型在索引中检测对象间语义关系的方法,以找到具有相似特征的相关对象。

向量搜索和推荐的解决方案变得越来越常见。如果你想在你的网站上添加自然语言文本搜索、创建图像搜索或构建强大的推荐系统,那么你就需要考虑使用向量技术。

为什么需要向量数据库

上面的一些概念解释了之后,其实在 AI 领域中,向量数据库是为了更高效地存储和检索大规模高维度的向量数据而设计的。由于传统的数据库系统并不擅长处理向量数据,因此需要专门的向量数据库来支持各种应用场景,例如语义搜索、图像检索、推荐系统等。

向量数据库被看做是Ai基础设施中最关键的一环,这种专门用于存储,索引和查询向量的数据库系统,可以让大模型更高效的存储和读取知识库,并且以更低成本的进行模型微调。Rust作为新基建的首选语言,也会在Ai基础设施中被大量采用。

与传统数据库不同,向量数据库可以使用特殊的索引结构和相似度度量方法,在高维度向量空间中快速查找相似的向量。例如,一些流行的向量数据库如 Faiss 和 Annoy 使用基于倒排索引和近似最近邻搜索(Approximate Nearest Neighbor Search)的技术,极大地加快了向量数据的查询速度。

向量数据库还提供了方便的 API 接口和工具库,使得用户可以轻松地将其集成到自己的应用程序中,并进行快速的向量搜索。因此,在许多需要处理大规模向量数据的 AI 应用中,向量数据库成为了不可或缺的组件。

向量数据库的实际应用:

我们以流行的向量数据库qdrant 为例,演示如何在实际业务中发挥向量数据库作用:

启动qdrant服务端

在Python中直接使用一个基于内存的qdrant的例子(类似sqlite本地数据库)

先安装python的依赖包,qdrant客户端:

pip install qdrant-client

python客户端提供了一种方便的方式在本地启动qrant 服务:

from qdrant_client import QdrantClient
qdrant = QdrantClient(":memory:") # 创建一个内存Qdrant实例,可以用来测试CICD
# 或者
# client = QdrantClient(path="path/to/db")  #使用持久化到磁盘的向量数据库文件

如果在生产中,则推荐使用命令直接运行docker容器作为qdrant服务端:

docker run -p 6333:6333 qdrant/qdrant

启动qdrant客户端

可以使用任何客户端库连接到服务端:

qdrant_client = QdrantClient("http://localhost:6333")
# 可参考官方具体应用例子https://qdrant.tech/documentation/examples/
# 如:
# 1. 语义搜索和推荐系统介绍。
# 2. 搜索和推荐报纸的文章。
# 3. 皮肤状况图像比对系统。
# 4. LlamaIndex问答系统。
# 5. 抽取式问答系统。

qdrant社区提供了 Python 等多种语言的客户端sdk。
qdrant的官方文档查看余下内容

支持向量机(SVM)的分类算法Linear SVC

Linear SVC(Linear Support Vector Classification)是一种基于支持向量机(SVM)的分类算法。与传统的SVM分类器不同,Linear SVC在处理线性可分的数据时采用了更快的线性核函数,因此比传统的SVM分类器更适用于大规模数据集。

Linear SVC算法的原理

将训练集的每个样本映射到高维空间中,以便在该空间中找到一个超平面来区分不同类别的样本。Linear SVC使用的是线性核函数,即将特征向量直接映射到高维空间中,而不需要进行复杂的非线性变换。这使得Linear SVC能够更快地训练模型,并且在处理大规模数据集时具有更好的性能。

在训练过程中,Linear SVC使用了一种称为“hinge loss”的损失函数来最小化误分类的样本数量。该损失函数使得模型对边界附近的样本更加敏感,从而提高了模型的泛化能力。

算法优点

与其他分类算法相比,Linear SVC具有许多优点,如:

  1. 在处理大规模数据集时具有更好的性能。

  2. 可以处理高维数据。

  3. 可以应对多类别分类问题。

  4. 具有良好的泛化能力和鲁棒性。

  5. 易于调整模型参数,可以通过调整正则化参数和损失函数等来控制模型的复杂度和性能。

在什么情况下建议选用Linear SVC算法?

可参照 机器学习算法速查表按流程选择来确定是否应该选择Linear SVC作为模型的算法。

总之,Linear SVC是一种高效、简单且具有良好性能的分类算法,适用于处理大规模数据集和高维数据。… 查看余下内容

下一页 »
加好友请备注:chinaoss
您可以在微信公众号联系我们
我们将24小时内回复。
取消