当前位置: 首页 > news >正文

人工智能学习用的电脑安装cuda、torch、conda等软件,版本的选择以及多版本切换

        接触人工智能的学习三个月了,每天与各种安装包作斗争,缺少依赖包、版本高了、版本低了、不兼容了、系统做一半从头再来了。。。这些都是常态。三个月把单位几台电脑折腾了不下几十次安装,是时候总结一下踩过的坑和积累的经验了。

        以一个典型的学习人工智能Ubuntu系统电脑为例,其软件结构和安装顺序为:ubuntu-->显卡相关(驱动、cuda、cudnn)-->anaconda-->pytorch(torch和vision)-->pycharm-->算法应用平台(比如mmdetection)。虽然算法应用平台是最后安装的,但是各个软件的版本选择却必须从算法应用平台的版本开始,因为所有的安装都是为了最后的算法应用平台服务的。这是初学的时候最容易踩的坑,往往费劲九牛二虎之力,到了最后的环节才发现版本不兼容,又得从头再来。我第一次安装用了一个星期才成功。

        下面就重新再从头安装一次系统,并作记录以备忘。

一、Ubuntu的版本选择

        Ubuntu的版本是向下兼容的,目前我安装过3个不同时期的版本,还没有遇到过由于版本过新造成的不兼容。所以Ubuntu的版本选择,原则上是越新越好。唯一需要注意的是,非常新的版本有可能对老硬件支持不好,比如我就在华硕x99主板电脑上安装v24.10Ubuntu不成功,换为v22.04Ubuntu后就安装成功了。

二、安装Ubuntu

        安装过程略,详见下面链接的文章:使用 MMDetection 实现 Pascal VOC 数据集的目标检测项目练习(二)系统安装_pascal voc数据集-CSDN博客

三、显卡驱动的版本选择

        显卡驱动可以新一些,它是向下兼容的,不选最新版,选较新版就可以,比较新的版本支持的最高cuda版本会高些,会让后面的使用多一些选择。

        在Ubuntu系统安装完成之后,从设置-->关于-->软件升级-->附加驱动那里安装,成功率会很高。不要用那种下载官网驱动然后本地安装的方法,很麻烦,很容易黑屏变砖。

注意别选open kernel版的,我没试过,看别人说的不要选。 

四、安装最高版本的cuda

        安装完Ubuntu之后,在安装Ubuntu时创建的这个默认用户下将系统软件和显卡驱动升级,并且安装最高版本的CUDA。

允许安装的最高CUDA版本,输入以下命令后查看:

nvidia-smi

        记住这个坑:CUDA VERSION 12.2,如果显示12.2,那么就装12.1,因为刚好pytorch在这个附近只有支持cuda12.1的版本,没有支持v12.2的。

打开:https://developer.nvidia.com/cuda-12-1-0-download-archive

        复制图中方框内的链接文字,用下载工具或者在浏览器地址栏输入链接,下载cuda12.1安装文件:cuda_12.1.0_530.30.02_linux.run。

        安装过程略,详见上面链接的文章。使用 MMDetection 实现 Pascal VOC 数据集的目标检测项目练习(二)系统安装_pascal voc数据集-CSDN博客

        之所以要先安装最高版本的cuda,是因为在安装多个版本cuda时,如果先装了一个低版本的,再安装高版本的时候就报错不允许安装,而安装了一个最高版本后,就可以继续随意安装比它低的版本。

        在这个cuda版本中,暂时没有需要的应用,所以cudnn、conda、torch等暂不安装,需要时再装。

        然后根据各个算法应用平台对于cuda和python、torch等的版本特定要求,创建新的用户,每个用户安装特定版本的cuda和其他软件。

五、特定版本的选择和下载安装

创建一个新用户,并添加sudo权限:

sudo adduser 新用户名
sudo usermod -aG adm 新用户名
sudo usermod -aG sudo 新用户名

        比如,我们这里新建一个名为mmde的用户,创建这个用户的目的是为了安装和运行mmdetection,下面就以运行mmdetection的平台配置为例:

sudo adduser mmde
sudo usermod -aG adm mmde
sudo usermod -aG sudo mmde

重启电脑登录新用户,开始安装特定版本的应用程序和软件框架。

        在mmdetection官网:https://mmdetection.readthedocs.io/zh-cn/latest/get_started.html

获取到它推荐的一些版本信息:Python>=3.7,cuda>=9.2,pytorch>=1.8。

        后面的所有安装就基于以上的版本要求进行,千万不要一昧求新 ,虽然原则上很多软件都向下兼容,但是安装的软件版本过高有可能会出现兼容问题。比如,我就在 pytorch=2.2.2, python=3.11,cuda=11.8的基础上安装mmdetection失败,出错提示的内容是本地已安装的依赖包版本高于了所需版本。

        大部分的算法应用平台和框架的官网都会给出依赖软件推荐的版本,如果官网没有给出就多翻翻别人的安装文章,一定要先做好版本规划再开始安装整个系统,这很重要!!!做好系统规划,后面的安装基本上都是一次成功。

上面已知mmdetection的版本需求是:

        Python>=3.7

        cuda>=9.2

        pytorch>=1.8

各个版本的选择就要比推荐版本略高一点点,尽量保持先进性,又不至于过分超前。

        下面就从pytorch开始来选择版本,为什么是pytorch,因为pytorch只针对某些特定的cuda版本推出了安装包,就是说pytorch“挑”包。有无数人在这里翻车,比如安装了cuda12.2,发现pytorch只有cuda12.1的版本,又回头去安装cuda12.1。所以在确定cuda版本之前要先确认torch的版本。

        1、pytorch和torchvision的版本

打开清华源:

Index of /anaconda/cloud/pytorch/linux-64/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror

我们的目标:

        pytorch>=1.8,所以在上面的网页中查找符合预期的版本,比如1.9;

        cuda>=9.2,选择cuda9.2+或者cuda10;

        Python>=3.7,选择3.8;

        基于以上,那么符合要求的就是:

点击下载,获得文件:pytorch-1.9.0-py3.8_cuda10.2_cudnn7.6.5_0.tar.bz2

从上面选定的torch的文件名还获取到了我们需要的各个版本信息:        

        pytorch=1.9

        python=3.8

        cuda=10.2

        cudnn=7.6.5

然后,参照下面的torch、vision、python的对照表,选择torchvision版本:

  至此,获取到了现阶段的版本清单:

        pytorch=1.9.0

        torchvision=0.10.0

        python=3.8

        cuda=10.2

        cudnn=7.6.5

在网页:Index of /anaconda/cloud/pytorch/linux-64/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror

 中查找:vision-0.10.0-py38_cu102,就可以找到cudnn的链接,点击下载,得到文件:torchvision-0.10.0-py38_cu102.tar.bz2

2、anaconda的版本

• anaconda的版本选择依据:

        conda的base环境预置了一个基础的python和其他各种常用科学计算包、基础包,每个conda版本的这些包的出品的时期很接近。
        所以conda的版本就要从后面倒推回来:算法应用平台对python的版本要求-->conda的基础python版本-->conda版本。

根据下表:

 由mmdetection对python的要求:python=3.8,获得了anaconda的版本:2021.05       

打开清华源,搜索和下载:

Index of /anaconda/archive/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror

得到文件:Anaconda3-2021.05-Linux-x86_64.sh 

3、pycharm的版本

    官网:PyCharm中文网

        pycharm的版本尽量新一些,功能会多一些,尤其是最近的版本,直接在IDE中内置了AI插件,很好用。另外在创建conda环境方面,新版也比老版好用得多,建议用次新版。

 下载2024.1.7版,得到文件:pycharm-community-2024.1.7.tar.gz       

        至此,已经明确了所有的版本并且已经下载了部分安装文件,下面就按照既定的版本按顺序下载和安装。

        安装顺序:cuda、cudnn-->anaconda-->pytorch(torch和vision)-->pycharm。所有的安装包都拷贝到本用户home/下的私有目录,省得因为权限问题纠缠。应用程序安装的路径要选择在所有用户可以访问到的的公用目录,比如:/opt,不要选在用户的私有目录,比如各用户的home/,否则会有共享权限的麻烦。    

4、cuda的下载和安装     

CUDA Toolkit Archive | NVIDIA Developer,以及:

https://developer.nvidia.com/cuda-10.2-download-archive

        复制图中方框内的链接文字,用下载工具或者在浏览器地址栏输入链接,下载cuda10.2安装文件:cuda_10.2.89_440.33.01_linux.run

        安装过程略,详见上面链接的文章。使用 MMDetection 实现 Pascal VOC 数据集的目标检测项目练习(二)系统安装_pascal voc数据集-CSDN博客

需要注意的是,由于当前的GCC版本过高,在安装cuda10.2的时候会出错,使用:Ubuntu中使用多版本的GCC-CSDN博客 

的方法来安装GCC7,并且用GCC7来安装cuda10.2。

这里注意要选no。

5、cudnn的下载和安装

https://developer.nvidia.com/rdp/cudnn-archive

记得这里有个坑,不要选deb格式!亲试安装不成功。

 点击下载,得到文件:cudnn-10.2-linux-x64-v7.6.5.32.tgz。安装过程见上面的链接。

6、anaconda的安装 

sudo bash Anaconda3-2021.05-Linux-x86_64.sh

Anaconda3-2021.05-Linux-x86_64.sh是之前下载的anaconda安装文件的文件名。

        注意,在选择安装路径这里,要选择到自己定义的以anaconda版本命名的目录下,我这里用的是/opt/anaconda2105:

使用conda list,可以看到 base环境预置了一个3.8.8版本的python,与我们的预期是一致的:

• 创建新环境

        安装完anaconda,使用conda创建新环境。如果不使用克隆base环境的方法,而是使用这个指令直接创建:

conda create --name 环境名 python=3.xx

        那么直接创建的新环境中就只有几十个必备的包,像常用的科学计算和图像处理包,如numpy、pillow等都没有预置,在后续的安装过程中就经常会提示依赖包不全而造成安装无法进行,有时候即使看上去安装成功了,运行时又提示缺少依赖包。而如果使用克隆base环境的方法,由于base环境已经包含了常用的很多科学计算包,后续安装的成功率就会高很多。克隆的唯一缺点是占用硬盘空间比较大,一个base环境大约一两个G的空间。

        另外,不建议在base下直接安装应用包,因为在新建的环境中如果安装乱了可以将其删除重建,而base环境一旦安装乱了,就没法收拾了。

• 使用克隆base,创建新环境的方法: 

conda create -n 新环境名字 --clone base

所以这里创建一个克隆base的新环境: 

conda create -n mmde --clone base

7、pytorch和torchvision的安装

在刚创建的名为mmde的新环境中安装pytorch和torchvision。

conda activate mmde

 安装pytorch

conda install pytorch-1.9.0-py3.8_cuda10.2_cudnn7.6.5_0.tar.bz2

 pytorch-1.9.0-py3.8_cuda10.2_cudnn7.6.5_0.tar.bz2是之前下载的pytorch安装文件的文件名。

 安装torchvision

conda install torchvision-0.10.0-py38_cu102.tar.bz2

torchvision-0.10.0-py38_cu102.tar.bz2 是之前下载的torchvision安装文件的文件名。

8、pycharm

新建文件夹:

sudo mkdir -p /opt/pycharm

将之前下载得到的文件解压缩到新建的文件夹内:

sudo tar -xzf pycharm-community-2024.1.7.tar.gz -C /opt/pycharm

        切换到/usr/share/applications/目录,这是存放应用程序快捷方式的目录。然后新建一个文本文件:pycharm.desktop 

cd /usr/share/applications/
sudo nano pycharm.desktop

在其中输入:

[Desktop Entry]
Name=PyCharm
Comment=Python IDE
Exec=/opt/pycharm/pycharm-community-2024.1.7/bin/pycharm.sh
Icon=/opt/pycharm/pycharm-community-2024.1.7/bin/pycharm.png
Terminal=false
Type=Application
Categories=Development;IDE;

 保存并退出,现在在应用程序菜单中就可以找到了pycharm的快捷方式:

六、环境变量路径的设置 

        至此,已经基本完成了系统的安装。不过由于没有设置cuda路径,所以输入:

nvcc -V

会出现未安装cuda toolkit:

1、单版本和单用户的cuda路径的设置方法

         用文本编辑器打开bashrc文件:

sudo gedit ~/.bashrc

        在bashrc文件的末尾加入:

export PATH=$PATH:/usr/local/cuda-xx.x/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-xx.x/lib64
export CUDA_HOME=$CUDA_HOME:/usr/local/cuda-xx.x

cuda-xx.x是cuda的实际版本,比如:11.2。

然后在pycharm中打开settings:

Environment variables新建两个路径: 

 LD_LIBRARY PATH=/usr/local/cuda-xx.x/lib64:/usr/local/cuda-xx.x/extras/CUPTI/lib64:$LD LIBRARY PATH

以及

CUDA_HOME=/usr/local/cuda-xx.x

        这样的话,pycharm的python控制台就指向了特定版本的cuda路径。用这种方式,多版本多用户,就需要在每个用户下单独安装pycharm。

2、多版本、多用户情况下的的路径设置

        如果所有用户既要共用pycharm,又想不同用户使用不同的cuda路径,只需要针对不同用户分配不同版本cuda路径,修改/etv/profile文件,根据不同用户的登录,在系统启动时就把cuda版本指定好,这样的好处是pycharm中不用再设置python控制台路径,也不用在每个用户的.bashrc中设置cuda路径。与bashrc文件相比,profile文件的作用域更大,起效时间更早。详见:

Ubuntu系统的.bashrc、/etc/profile 和 /etc/environment文件_ubuntu bashrc-CSDN博客

        具体如下:

sudo nano /etc/profile

 加入内容:

if [ "$USER" = "user1" ]; thenexport PATH="$PATH:/usr/local/cuda-xx.x/bin"export LD_LIBRARY_PATH="/usr/local/cuda-xx.x/lib64:/usr/local/cuda-xx.x/extras/CUPTI/lib64:$LD_LIBRARY_PATH"export CUDA_HOME="/usr/local/cuda-xx.x"
elif [ "$USER" = "user2" ]; thenexport PATH="$PATH:/usr/local/cuda-yy.y/bin"export LD_LIBRARY_PATH="/usr/local/cuda-yy.y/lib64:/usr/local/cuda-yy.y/extras/CUPTI/lib64:$LD_LIBRARY_PATH"export CUDA_HOME="/usr/local/cuda-yy.y"
fi

xx.x和yy.y是需要设置的cuda版本号,比如:10.2和12.1。

七、安装应用平台:mmdetection

按官网的推荐:

 • 执行第一步安装openmim,出现了依赖包不全的提示:

检查和补全依赖包:

pip check   # 检查缺少的依赖包
pip install spyder=4.2.5
pip check
pip install conda-repo-cli==1.0.4
pip check
pip install nanconda-project==0.9.1

每安装一个就使用pip check来确认是否还有缺少的包。直到:

• 执行第二步mim install mmengine,正常安装即可。

• 执行第三步:不要使用mim install "mmcv>=2.0.0",因为在我安装的这个时间节点(2024-11-25),它会安装一个2.2.0版的mmcv,但是它的实际运行中又有要求mmcv版本<2.2.0,这样就会报错。所以改为了mim install "mmcv==2.1.0",安装一个2.1.0版本的mmcv。

下面mmdetection具体的安装过程见: 使用 MMDetection 实现 Pascal VOC 数据集的目标检测项目练习(三)MMDetection安装-CSDN博客

 安装完后试运行:

一遍过! 

八、总结:

        系统中共有cuda toolkit、cudnn、anaconda、pytorch、pycharm以及应用平台(比如mmdetection)等软件和环境平台。

• Ubuntu的版本在硬件的支持范围内越新越好,pycharm也可以用较新的版本。

• 各个软件的版本的选择顺序:应用平台(比如mmdetection)的版本要求-->cuda系列和torch系列以及python版本-->由python版本获得anaconda版本。

• 除了pycharm之外,针对不同的cuda,每个用户安装一套版本的软件。

• cuda版本的路径切换在/etc/profile中设置,其余的用默认路径设置。

相关文章:

人工智能学习用的电脑安装cuda、torch、conda等软件,版本的选择以及多版本切换

接触人工智能的学习三个月了&#xff0c;每天与各种安装包作斗争&#xff0c;缺少依赖包、版本高了、版本低了、不兼容了、系统做一半从头再来了。。。这些都是常态。三个月把单位几台电脑折腾了不下几十次安装&#xff0c;是时候总结一下踩过的坑和积累的经验了。 以一个典型的…...

提高身份证 OCR 识别 API 接口的准确性的方法

身份证OCR识别API接口能够快速、准确地识别并提取身份证上的文字信息&#xff0c;包括姓名、性别、民族、出生日期、住址、身份证号、签发机关、有效期限等关键内容&#xff0c;将其转化为计算机可处理的结构化数据&#xff0c;从而实现身份证信息的自动化录入和处理&#xff0…...

PHP面向对象

在 PHP 中&#xff0c;面向对象编程&#xff08;Object-Oriented Programming&#xff0c;简称 OOP&#xff09;是一种编程范式&#xff0c;它使用“对象”来组织和设计代码。对象是类的实例&#xff0c;类是定义对象特征和行为的蓝图。面向对象编程的主要目标是提高代码的可重…...

Tomcat新手成长之路:安装部署优化全解析(下)

接上篇《Tomcat新手成长之路&#xff1a;安装部署优化全解析&#xff08;上&#xff09;》: link 文章目录 7.应用部署7.1.上下文7.2.启动时进行部署7.3.动态应用部署 8.Tomcat 类加载机制8.1.简介8.2.类加载器定义8.3.XML解析器和 Java 9.JMS监控9.1.简介9.2.启用 JMX 远程监…...

GPT 1到4代的演进笔记

1. GPT-1 标题是 Improving Language Understanding by Generative Pre-Training. 发表于 2018.02, 比 bert(发布于 2018.10) 早了半年. 1.1 动机 困难:NLU 任务是多样的, 有 {textual entailment, question answering, semantic similarity assessment, document classifica…...

vitepress组件库文档项目 markdown语法大全(修正版)

#上次总结的 有些语法是用在markdown文档中的 使用到vitepress项目中有些语法可能有出入 于是我再总结一版 vitepress项目中的markdown语法大全 在阅读本章节之前&#xff0c;请确保你已经对 Markdown 有所了解。如果你还不了解 Markdown &#xff0c;请先学习一些Markdown 教…...

Vue3技术开发,使用纯CSS3动手制作一个3D环绕的相册展示效果,支持传入任意图片.3D轮播相册的组件

主要讲述封装一个3D轮播相册的组件&#xff0c;效果图如下&#xff0c;仅仅传入一个图片的数组即可&#xff0c;效果如下&#xff1a; 使用Vue3技术开发&#xff0c;支持传入任意张数的图片。 使用方法 <template><Swiper :list"list" /> </templat…...

LeetCode 力扣 热题 100道(十五)搜索插入位置(C++)

给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 代码如下所示&#xff1a; class Solution { public:int searchIns…...

【035】基于51单片机俄罗斯方块游戏机【Proteus仿真+Keil程序+报告+原理图】

☆、设计硬件组成&#xff1a;51单片机最小系统LCD12864液晶显示按键控制。 1、设计采用STC89C52、AT89C52、AT89S52作为主控芯片&#xff0c;采用LCD12864液晶作为显示&#xff0c;大屏显示就是刺激&#xff1b; 2、游戏设置十个关卡&#xff0c;每个关卡累计99分即可进入下…...

NAT traversal 原理 | TCP / UDP/ P2P

注&#xff1a;本文为 “NAT traversal ”相关的几篇文章合辑。 未整理去重。 NAT 穿越技术原理 Li_yy123 于 2020-12-08 18:54:26 发布 一、NAT 由来 为了解决全球公有 IPv4 的稀缺&#xff0c;提出了 NAT 技术。NAT 是 Network Address Translation 网络地址转换的缩写。 …...

如何成长为一名工程技术经理

https://medium.com/srivatsan-sridharan/how-to-grow-as-an-engineering-manager-687cad0bcac7 作为一名工程技术经理&#xff0c;你可能已经积累了丰富的团队管理经验&#xff0c;并展示了出色的项目管理、优先级管理和员工指导能力。然而&#xff0c;尽管如此&#xff0c;你…...

GEE开发之下载海拔、坡度、坡向数据

GEE开发之加载海拔、坡度、坡向数据 方法一&#xff1a;加载elevation、slope、aspect和hillshade数据方法二&#xff1a;加载elevation、slope、aspect数据 前言&#xff1a;根据矢量图加载海拔、坡度、坡向和山体阴影。 方法一&#xff1a;加载elevation、slope、aspect和hil…...

gozero项目迁移与新服务器环境配置,包含服务器安装包括go版本,Nginx,项目配置包括Mysql,redis,rabbit,域名

迁移 **GoZero** 项目到新服务器并配置相关环境涉及多个步骤。以下是一个系统化的指南&#xff0c;涵盖服务器环境安装、数据库和缓存配置、项目部署以及域名绑定。 ### 步骤概述 1. **服务器环境配置** - 安装 Go 语言环境 - 安装 Nginx - 安装 MySQL 和 Redis -…...

Scala正则表达式全面教程

一、正则表达式概述 正则表达式&#xff08;Regular Expression&#xff0c;简称RegEx&#xff09;是一种用于字符串搜索和操作的强大工具&#xff0c;它使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在Scala中&#xff0c;正则表达式通过scala.util.matching.…...

伺服电机为什么会变慢?

在现代工业自动化和控制系统中&#xff0c;伺服电机因其高效性和精确的控制能力而被广泛应用于各类机器和设备。然而&#xff0c;在实际使用中&#xff0c;有时用户会发现伺服电机的运行速度出现了下降的现象。这一变化不仅会影响生产效率&#xff0c;还可能对设备的安全性和可…...

61 基于单片机的小车雷达避障及阈值可调

所有仿真详情导航&#xff1a; PROTEUS专栏说明-CSDN博客 目录 一、主要功能 二、硬件资源 三、主程序编程 四、资源下载 一、主要功能 基于51单片机&#xff0c;采用超声波传感器检测距离&#xff0c;通过LCD1602显示屏显示&#xff0c;三个按键&#xff0c;第一个按键是…...

微信小程序之手机归属地查询

微信小程序之手机归属地查询 需求描述 API申请和小程序设置 API申请 第一步&#xff1a;完整账号注册 我们需要来到如下网站&#xff0c;注册账号&#xff1a;万维易源 第二步&#xff1a;账号注册完成以后&#xff0c;点击右上角的控制台信息。 第三步&#xff1a;在控制…...

ElementUI 问题清单

1、form 下面只有一个 input 时回车键刷新页面 原因是触发了表单默认的提交行为&#xff0c;给el-form 加上submit.native.prevent就行了。 <el-form inline submit.native.prevent><el-form-item label"订单号"><el-inputv-model"query.order…...

DVWA靶场——XSS(Stored)

一&#xff0c;Stored XSS 漏洞详解 存储型跨站脚本攻击&#xff08;Stored XSS&#xff0c;或称为 Persistent XSS&#xff09; 是一种常见的跨站脚本攻击&#xff08;XSS&#xff09;类型&#xff0c;它通过将恶意脚本&#xff08;通常是 JavaScript 代码&#xff09;直接存储…...

Spring框架中的Bean是线程安全的吗?

概述 在Java开发中&#xff0c;Spring框架是一个广泛使用的轻量级控制反转&#xff08;IoC&#xff09;和面向切面&#xff08;AOP&#xff09;容器框架。它简化了企业级应用的开发&#xff0c;提供了丰富的功能&#xff0c;如依赖注入、事务管理、消息传递等。在Spring框架中…...

uniapp远程摄像头流界面上显示

用到的插件&#xff1a;dplayer、hls dplayer官网&#xff1a;dplayer dplayer官网npm安装的是最新版本&#xff08;1.27.1&#xff09;&#xff0c;真机运行异常了&#xff0c;可以安装历史版本 dplayer历史版本 远程摄像头视频流格式&#xff1a;m3u8 可以用来测试的视频流&a…...

elasticSearch(一):elasticSearch介绍

一、搜索引擎 搜索引擎的核心目的是帮助用户以最小的成本才海量数据中找到最想要的结果。糟糕的搜索引擎往往会所问非所答&#xff0c;用户查了半天也得不到自己想要的&#xff0c;好的搜索引擎往往第一页就是用户最想要的结果。而目前判断搜索引擎好坏一般是从召回率、精确率…...

基于 RWKV 的视觉语言模型 VisualRWKV 被 COLING 2025 接收!

基于 RWKV 的视觉语言模型 VisualRWKV 被 COLING 2025 接收&#xff01; COLING&#xff0c;国际计算语言学会议&#xff08;International Conference on Computational Linguistics&#xff09;&#xff0c;是自然语言处理和计算语言学领域的顶级国际会议&#xff08;CCF 推…...

输出九九乘法表:JAVA

链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 来源&#xff1a;牛客网 输出九九乘法表。 具体的输出格式见样例&#xff0c;其中每一项乘法的结果需要占据2个字符宽度&#xff0c;不同的乘法结果之间用1个空格间隔。 举例&#xff1a; 1*4_4_2*4_8_3*412_4*416 上…...

kube-proxy的iptables工作模式分析

系列文章目录 iptables基础知识 文章目录 系列文章目录前言一、kube-proxy介绍1、kube-proxy三种工作模式2、iptables中k8s相关的链 二、kube-proxy的iptables模式剖析1.集群内部通过clusterIP访问到pod的流程1.1.流程分析 2.从外部访问内部service clusterIP后端pod的流程2.1…...

xiaolin coding 图解 MySQL笔记——锁篇

1. 全局锁是怎么用的&#xff1f; flush tables with read lock 执行以后&#xff0c;整个数据库就处于只读状态了&#xff0c;这时其他线程执行对数据的增删改操作&#xff08;insert、delete、update&#xff09;&#xff1b;对表结构的更改操作&#xff08;alter table、dr…...

11-SpringCloud Alibaba-Seata处理分布式事务

一、Seata基本介绍 官网&#xff1a;https://seata.apache.org/zh-cn/ Seata 是一款开源的分布式事务解决方案&#xff0c;致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式&#xff0c;为用户打造一站式的分布式解决方案。 我…...

更换 Git 项目的远程仓库地址(五种方法)

更换 Git 项目的远程仓库地址有几种不同的方法&#xff0c;下面是详细的步骤和一些额外的方法来完成这个任务。 方法1&#xff1a;使用 git remote set-url 这是最直接的方法。假设你想要更改名为 origin 的远程仓库地址到新的 URL。 查看当前的远程仓库配置&#xff1a; git…...

3大模块助力学生会视频自动评审系统升级

一、项目背景 传统的学生会视频作品或电子申请材料评审由老师线下逐一面审完成。面对大量学生提交的作品&#xff0c;评审效率低、耗时长&#xff0c;且主观性较强。为此&#xff0c;客户希望开发一个基于AI的线上自动面审系统&#xff0c;从语法正确性、演讲流利度和发音准确…...

鸿蒙开发——使用ArkTs处理XML文本

1、概 述 XML&#xff08;可扩展标记语言&#xff09;是一种用于描述数据的标记语言&#xff0c;旨在提供一种通用的方式来传输和存储数据&#xff0c;特别是Web应用程序中经常使用的数据。XML并不预定义标记。因此&#xff0c;XML更加灵活&#xff0c;并且可以适用于广泛的应…...