Search Posts

分类: 机器学习

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
查看余下内容

如何在 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是一种高效、简单且具有良好性能的分类算法,适用于处理大规模数据集和高维数据。… 查看余下内容

机器学习模型算法速查表scikit-learn algorithm cheat-sheet的原理,如何用它选择模型算法?

Scikit-learn algorithm cheat-sheet 是一个流程图(算法速查表),旨在帮助用户选择适合其数据集的机器学习算法。该图根据数据集的属性(例如数据类型、数据量、标签类型等)和任务类型(例如分类、回归、聚类等)提供了一系列适合的算法建议。

假设我们有一批样本(样本数量少于50个),则根据算法速查表,会进入“get more data”流程,也就是样本数量不足,不建议基于这批样本进行机器学习。

再假设我们有一批样本(样本数量11万,样本CSV数据中有一列作为某个方面的数据的LABEL,即带有结果的数据),我们希望基于样本学习后,对以后新的数据进行类别预测。 那么根据流程,predicting a category(是预测类别的问题吗) ->YES(是)-> do you have labeled data(样本是否有标签)-> YES(是)。 流程至此,就到了图中的 “Linear SVC”算法位置

使用该工具选择模型算法的步骤如下:

  1. 确定数据集的属性和任务类型。

  2. 根据数据集的属性和任务类型在流程图中找到相应的部分。

  3. 根据流程图中的建议选择适合的算法。

  4. 根据所选算法的文档和示例学习如何使用该算法。

需要注意的是,该流程图只是一个参考工具,不是绝对的规则。选择模型算法时需要综合考虑数据集的实际情况以及算法的优劣势,并进行实际测试和评估。

此外,Scikit-learn algorithm cheat-sheet 的原理是基于机器学习算法的特性、优劣势以及适用场景等因素,将常见的机器学习算法分成了几个大类,并在流程图中以可视化的方式展示了它们之间的关系和特点。这为选择合适的机器学习算法提供了一个初步的参考,帮助用户在众多的机器学习算法中快速找到适合自己数据集的算法。… 查看余下内容

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