Search Posts

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

提高大型语言模型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 中的应用。… 查看余下内容

c++代码模块通过vcpkg安装时的报错vcpkg distribution does not have a classic mode instance的原因和解决

vcpkg安装模块的命令举例:

vcpkg install libvpx:x64-windows-static libyuv:x64-windows-static opus:x64-windows-static aom:x64-windows-static

vcpkg命令报错信息:

Computing installation plan…
error: Could not locate a manifest (vcpkg.json) above the current working directory.
This vcpkg distribution does not have a classic mode instance.

问题原因:

执行以上vcpkg install …… 命令之前,必须需要先cd到项目的c++代码根目录。然后执行vcpkg install …… 安装c++项目依赖的库即可。… 查看余下内容

windows压缩的文件建议用7zip格式而非zip或rar格式,能防止在linux下zip和rar解压后中文文件名乱码问题

windows下压缩文件请用7zip,能防止在linux下压缩包内文件名乱码:

以上结论经过测试验证的。确实如此,windows下压缩的zip和rar包,在win下打开里面文件名(含中文名文件)显示正常,但是在linux下用xarchiver 等软件往往显示为乱码,解压后也是乱码。

而如果在win下用7zip格式压缩的,就不存在以上问题。其他方案还有:在win下压缩的zip格式,如果在linux下用7za(p7zip)软件解压,也不会出现中文名乱码问题。

centos下p7zip的安装方法:

yum install  -y p7zip

ubuntu/debian下的安装方法:

apt-get install -y p7zip

效果对比:

linux下用unrar命令解压出的文件名中文乱码,后面括号内带有“无效的编码”字样,解决方法:

linux下,当使用unrar 解压命令解压来自 windows下压缩的rar 文件时:

unrar x rar文件名

问题表现:

rar压缩文件内的文件名如果是英文,解压后显示正常。如果带有中文,解压缩时中文变成乱码,乱码文件名后面带有(无效的编码)字样。如下图所示:

问题原因:

rar文件在win系统创建,文件名默认使用gb2312编码,而gb2312字符编码在linux下用unrar软件解压后,没有正确解码中文。linux下默认的字符(中文也是一类字符)编码方式是UTF-8。

解决方法:

需要用转码工具convmv进行文件名转码

ubuntu/debian 系统下需要先安装 convmv软件:

sudo apt-get install convmv


然后转码当前目录下的文件名乱码文件名为linux下正常显示的文件名:

convmv * -f gb2312 -t utf8 –notest

注意:

由于unrar的这段处理是2014年之前的情况和解决经验。后来unrar软件版本可能有更新,近几年随着linux系统对中文的支持越来越好,这个rar的问题可能不容易发生了。 如果仍遇到这样的问题,不妨用本文提到的方法解决看。… 查看余下内容

断电/硬重启centos7 导致开机时内核崩溃,无法进入系统,解决方式记录

问题线索

用户反馈断电/硬重启centos7后,开机时出现内核崩溃(如下图),无法进入系统

解决方式记录

后来通过重新升级了一下内核(可借助救援模式的chroot方式+ iso作为软件源+yum方式重新安装内核),解决了这个问题,应该是内核文件坏了。 有一点要改进的,根目录所在分区是 ext3格式的,无法保证断电或硬重启后的数据一致性。 建议换成ext4或者xfs、reiserfs等健壮日志文件系统。

本文是2015年的处理经历。… 查看余下内容

yum update 更新软件的时候如何主动跳过内核软件文件的升级

centos/redhat/fedora升级kernel有时候可能会出现服务器无法启动,所以建议您在用yum update方式升级系统软件补丁时排除内核升级。

打开/etc/yum.conf

sudo vim   /etc/yum.conf

在这个文件的[main]段中,下添加一行,如下:

exclude=kernel*

就可以跳过内核升级步骤

生产环境下如果内核必须升级,可以考虑找一台软件硬件配置一样的服务器先测试升级内核( 去掉上面的exclude…配置,然后命令 yum update kernel*),成功后再到生产环境升级内核。… 查看余下内容

CentOS的firewall-cmd用法详细总结

Centos 采用的防火墙firewalld简介:

firewalld 是 CentOS 和其他一些 Linux 发行版中默认使用的防火墙软件,它提供了一种灵活的方式来管理系统的网络安全和连接。

firewalld 使用 D-Bus 接口来管理网络连接,它使用基于区域的策略来控制入站和出站流量,并且可以在运行时动态更新规则。这使得 firewalld 比传统的 iptables 防火墙更加灵活和易于管理。

以下是 firewalld 的一些主要特点:

  1. 支持基于区域的策略:firewalld 使用基于区域的策略来控制入站和出站流量。每个区域都有一个预定义的安全级别和一组服务,这些服务定义了允许访问的端口和协议。你可以轻松地将系统接口分配给不同的区域,并在区域之间移动。

  2. 支持动态更新规则:firewalld 可以在运行时动态更新规则,无需重启防火墙服务。这使得添加或删除规则变得更加方便和快捷。

  3. 支持网络连接跟踪:firewalld 可以跟踪网络连接并在其生命周期内应用相应的规则。这使得 firewalld 能够更好地保护系统安全和隐私。

  4. 支持 IPv6:firewalld 支持 IPv6,可以轻松地管理 IPv6 网络安全。

  5. 支持命令行和图形界面:firewalld 提供了命令行和图形界面两种管理方式。你可以使用命令行工具 firewall-cmd 来管理防火墙,也可以使用图形界面工具 firewall-config 来配置防火墙规则。

总之,firewalld 是一个功能强大且易于管理的防火墙软件,它提供了一种灵活的方式来保护系统网络安全和连接。如果你使用 CentOS 或其他一些 Linux 发行版,firewalld 是一个值得考虑的防火墙解决方案。

firewall-cmd 的不同场景应用举例:

如果通过命令方式修改firewalld防火墙规则,则通过firewall-cmd 命令具体执行,以下是一些实际例子:

firewall-cmd 设置linux防火墙允许80端口对外访问:

firewall-cmd --zone=public --add-port=80/tcp --permanent

查看当前规则:

firewall-cmd --list-all public

允许特定服务通过防火墙:

firewall-cmd --zone=public --add-service=httpd --permanent

让firewall-cmd命令设置的规则马上生效:

firewall-cmd --reload

对于非默认端口的开放,除了要防火墙允许,还要selinux允许,

在centos7等最新的发行版上,默认启用了selinux,而selinux允许指定端口的命令是:

semanage port -a -t http_port_t -p tcp 81
semanage port -a -t ssh_port_t -p tcp 222
semanage port -a -t vnc_port_t -p tcp 5999

除非关闭了selinux(命令 setenforce 0 可关闭 selinux ,如果永久关闭,可编辑/etc/sysconfig/selinux 文件将 SELINUX=enforcing 改成 SELINUX=disabled),才不需要额外执行以上命令。

要指定允许的来源ip和目标端口:

firewall-cmd --permanent --zone=public --add-rich-rule='
  rule family="ipv4"
  source address="10.10.99.10/32"
  port protocol="tcp" port="80" accept'

firewalld 根据nginx访问日志的 503 记录,自动屏蔽特定ip:

iptables 方式:

*/1 * * * * for itm in /usr/bin/tail -2000 /www/wwwlogs/site.com.log
查看余下内容

如何格式化超出 4TB 限制的 Ext4 文件系统

所有文件系统都有限制

Ext 系列的文件系统也不例外。使用标准 4KiB 块大小,32 位 Ext3 的卷限制为 16TB。随着存储介质的进步和容量增加的更大可用性,Ext4 的开发是为了克服这一限制。Ext4 现在将支持高达 1 EB (EiB) 的卷。

这是一个了不起的改进,但是当您实际格式化其中一个卷时会发生什么?如果您的系统运行一些较旧的 fs 工具(如 Debian Squeeze),那么在尝试格式化大型卷时可能会遇到这种情况(假设我们在此示例中在 /dev/vg0/lv_data 处有一个 19TB 的分区)。

# mkfs -t ext4 /dev/vg0/lv_data 
mke2fs 1.42.7 (21-Jan-2013) 
mkfs.ext4: Size of device (0x131a47800 blocks) /dev/vg0/lv_data too big to be expressed in 32 bits using a block-size of 4096.

解决方式

解决方式1:使用 e2fsprogs 工具

尽管 Ext4 文件系统已更新为支持 64 位卷,但这些工具可能不支持。这里的解决方案是获取最新版本的 e2fsprogs 实用程序并自己构建它们。

首先,从sourceforge获取实用程序:

# cd /opt/
# wget -O e2fsprogs-1.42.7.tar.gz 
http://downloads.sourceforge.net/project/e2fsprogs/e2fsprogs/v1.42.7/e2fsprogs-1.42.7.tar.gz?r=http%3A%2F%2Fe2fsprogs.sourceforge.net%2F&ts=1361548232&use_mirror=superb-dca3

然后,提取文件并为您的构建进行设置

# tar -xzvf e2fsprogs-1.42.7.tar.gz
# cd e2fsprogs-1.42.7
# mkdir build
# cd build

如果您没有开发工具(如编译器和make),请立即安装它们

# apt-get install build-essential

现在,您已准备好构建工具:

# ../configure
查看余下内容

linux下ext3文件系统突然变成readonly只读的问题分析和解决方式

ext3是linux下较老的文件系统格式,但目前仍有少部分用户在使用ext3作为linux文件系统格式。

linux下ext3文件系统突然变成readonly 问题线索

#tail  -100  /var/log/messages

 Sep  1 04:02:21 www syslogd 1.4.1: restart.
 Sep  1 11:22:16 www avahi-daemon[2691]: Invalid query packet.
 Sep  1 11:22:57 www last message repeated 14 times
 Sep  1 11:22:57 www avahi-daemon[2691]: Invalid query packet.
 Sep  1 13:45:29 www kernel: ext3_abort called.
 Sep  1 13:45:29 www kernel: EXT3-fs error (device hdb1): ext3_put_super: Couldn't clean up the journal
 Sep  1 13:46:31 www kernel: kjournald starting.  Commit interval 5 seconds
 Sep  1 13:46:31 www kernel: EXT3 FS on hdb1, internal journal
 Sep  1 13:46:31 www kernel: EXT3-fs: mounted filesystem with ordered data mode.
 Sep  1 13:48:25 www kernel: printk: 5 messages suppressed.
查看余下内容

磁盘分区UUID 变化导致 start job is running for /dev/disk/by-uuid/2XX-XXXX 等待时间延迟错误,以及/etc/fstab的原理

磁盘分区UUID 变化导致启动等待的问题、解决过程

用户说分区扩容后,出现启动提示等待1分半时间,然后能进入系统。但感觉每次等待,等久了觉得麻烦,问能否解决。

后根据错误提示,认为/etc/fstab 内容可能有误。

初步认为是EFI分区 有问题。

后与用户沟通确认,扩容时更新了swap分区和根分区的UUID,然后出现上述问题。指导用户将/etc/fstab里的分区的UUID值改成使用扩容后的分区的新UUID,然后重启看到等待问题不再出现。

linux的磁盘的 UUID 变化与/etc/fstab 配置文件的作用:

关于 /etc/fstab 的语法结构和参数作用,可参考 开软技巧 作者在【深入理解Linux】公众号中总结的一篇专题文章:https://mp.weixin.qq.com/s/NEjeNSdkR3LucqI0kN89PQ

现原文《Linux的/etc/fstab文件一些常识。很重要也很简单,现在就看懂它!》摘录如下:

fstab文件包含了你的电脑上的存储设备及其文件系统的信息。它是决定一个硬盘(分区)被怎样使用或者说整合到整个系统中的文件。具体来说:用fstab可以自动挂载各种文件系统格式的硬盘、分区、可移动设备和远程设备等。对于Windows与Linux双操作系统用户,用fstab挂载FAT格式和NTFS格式的分区,可以在Linux中共享windows系统下的资源。

这个文件的全路径是/etc/fstab。它只是一个文本文件,你能够用你喜欢的编辑器打开它,但是必须是root用户才能编辑它。同时fsck、mount、umount的等命令都利用该程序。

/etc/fstab 是启动时的配置文件,不过,实际 filesystem 的挂载是记录到 /etc/mtab 与 /proc/mounts 这两个文件当中的。每次我们在更动 filesystem 的挂载时,也会同时更动这两个文件喔!

系统挂载的一些限制:

  • 根目录 / 是必须挂载的﹐而且一定要先于其它 mount point 被挂载进来。

  • 其它 mount point 必须为已创建的目录﹐可任意指定﹐但一定要遵守必须的系统目录架构原则

  • 所有 mount point 在同一时间之内﹐只能挂载一次。

  • 所有 partition 在同一时间之内﹐只能挂载一次。

  • 如若进行卸除,您必须先将工作目录移到 mount point(及其子目录) 之外。

/etc/fstab 配置文件的各字段解释:

示例:

#                                

#NOTE: If your BOOT partition is ReiserFS, add the notail option to opts.
查看余下内容
下一页 » « 上一页
加好友请备注:chinaoss
您可以在微信公众号联系我们
我们将24小时内回复。
取消