Docker AIGC等大模型深度学习环境搭建(完整详细版)

news2024/12/30 1:46:52

本文是《Python从零开始进行AIGC大模型训练与推理》(https://blog.csdn.net/suiyingy/article/details/130169592)专栏的一部分,所述方法和步骤基本上是通用的,不局限于AIGC大模型深度学习环境。

        Docker AIGC等大模型深度学习环境搭建步骤主要包含如下步骤:

  1. CUDA驱动更新
  2. Docker创建
  3. CUDA安装与验证
  4. CUDNN安装与验证
  5. conda Python环境安装
  6. ssh服务安装与配置
  7. 全部命令

1  CUDA驱动更新

        ChatGPT、Stable Diffusion等大模型属于相对较新的模型,所以依赖的Pytorch经常为torch1.12以上版本。相应的CUDA版本则至少为CUDA 11.3,并且显卡驱动对应的CUDA版本号不能小于CUDA库的版本号。下面将以CUDA 11.8驱动安装为例。

1.1 原有版本CUDA驱动卸载

        如果系统已安装低版本CUDA驱动,那么可通过如下命令进行卸载。

sudo /usr/bin/nvidia-uninstall
sudo apt-get purge nvidia*
sudo apt-get purge cuda*
sudo apt-get autoremove
sudo modprobe -r nvidia-drm#这一步不一定需要

1.2 CUDA驱动下载与安装

        CUDA下载地址为“https://developer.nvidia.com/cuda-toolkit-archive”,页面如下所示,选择“CUDA Toolkit 11.8.0 (October 2022), Versioned Online Documentation”。

        选择CUDA 11.8之后继续选择系统类型和下载文件,如下图所示。选择完成之后会显示出runfile下载地址和安装方式,即“wget https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda_11.8.0_520.61.05_linux.run”和“sudo sh cuda_11.8.0_520.61.05_linux.run”。

        输入sudo sh cuda_11.8.0_520.61.05_linux.run安装时,在安装选项页面用回车和上下键仅选择安装驱动,不安装其他CUDA套件,如下图所示。其中,前面的“X”表示已选择的将要安装内容。

1.3 环境变量配置

        待安装完成之后,采用如下命令进行环境变量设置。

export CUDA_HOME=/usr/local/cuda
export PATH=/usr/local/cuda-11.8/bin:$PATH
export LD_LIBRARY_PATH=/usr/lcoal/cuda-11.8/lib64:$LD_LIBRARY_PATH
source ~/.bashrc
nvcc -V

1.4 nvcc -V验证

        运行nvcc -V命令时系统会输出如下结果,显示相应驱动版本号。如果提示“Command 'nvcc' not found, but can be installed with”,那么使用“apt install nvidia-cuda-toolkit”安装nvidia-cuda-toolkit即可。如果nvcc -V输出的版本号不对,那么请按照上一节重新设置并更新环境变量。

1.5 重启电脑

        重启电脑后,运行“nvidia-smi”,如果提示“NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running.”

        解决方法如下:

        (1)先通过“ls -l /usr/src/”查看驱动版本号,如下图最后一行“nvidia -v 520.61.05”。

        (2)sudo dkms install -m nvidia -v 520.61.05

        完成之后,输入nvidia-smi可查看cuda版本和GPU显存使用情况,如下图所示。

 1.6 安装nvidia-container-toolkit

        如果不安装nvidia-container-toolkit,那么创建docker时可能会报错“docker: Error response from daemon: could not select device driver "" with capabilities: [[gpu]].”。安装方法请参考“https://www.cnblogs.com/dan-baishucaizi/p/15102419.html”,即:

distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit
sudo systemctl restart docker

2 docker创建

        docker容器是Linux下的虚拟机,并且在虚拟机下拥有root权限。这样既可以获取较高的权限,又可以避免对主机文件带来误操作。同一台主机上可以创建多个docker,并且每个docker中可安装不同版本CUDA,但是版本号不能高于主机CUDA驱动版本,否则可能会报错“CUDA driver version is insufficient for CUDA runtime version”。

2.1 docker安装

        Docker命令一般需要sudo权限,即“sudo docker 命令内容”。如果系统提示没有docker命令,那么需要按照下面步骤安装docker。

# 更新
$ sudo apt-get update
# 安装最新的Docker
sudo apt-get install docker.io
# 启动
sudo systemctl enable docker
sudo systemctl start docker

2.2 docker镜像

        Docker查看系统镜像的方法为“docker images”,运行后会有如下页面,页面中含有镜像ID,即IMAGE ID。

         我们可以通过docker pull来下载镜像,比如通过“docker pull ubuntu:18.04”下载基础的ubuntu 18.04镜像。下载完成后,可通过“docker images”命令进行查看,如上所述。

        删除已有镜像的命令为“docker rmi IMAGE ID”。IMAGE ID不需要完整内容,只需输入前几个字符就可以了,例如“docker rmi 394”

2.3 docker命令

        容器Container相当于是根据镜像安装的虚拟机。

        (1) 我们可以使用docker images来列出本地主机上的镜像。

        (2) 创建并运行docker容器:docker run -d -it -p 1088:8888 -p 1022:22 -p 1059:5900 -v /server/data:/docker/data --gpus all --shm-size="32g" ubuntu:18.04 /bin/bash

-p:docker端口映射,冒号前为主机端口号,冒号后为docker容器端口号。
-v:docker共享文件夹,冒号前为主机文件夹,冒号后为docker容器文件夹。
--gpus all:docker中可使用GPU。
--shm-size="32g":docker默认的最大内存较小,这里修改为32G内存,可根据修改自行替换为其他值。
ubuntu:18.04:镜像名称,为docker images返回中的一个,根据需要进行替换。

        (3) 查看docker状态:docker ps -a,可查看docker状态,以及容器ID(countainerID)。

        (4) 进入docker:docker exec -it countainerID /bin/bash,countainerID一般较长,只需前几个数字就可以了,系统会自动识别,与上面删除镜像的方法类似。

        (5)停止docker,docker stop countainerID。

        (6)启动docker,docker start countainerID,然后运行第(4)步进入docker。

        (7)删除docker,docker rm countainerID,运行前先通过第(5)步停止docker。

        (8) 清除全部已停止运行的docker,docker system prune。

2.4 docker创建镜像

        创建镜像是指将本地的docker环境打包成镜像,便于环境复制或部署。提交镜像的命令如下所示。

docker commit OPTIONS countainerID 自定义镜像名称:TAG说明

        OPTIONS说明:

        (1)-a :提交的镜像作者;

        (2)-c :使用Dockerfile指令来创建镜像;

        (3)-m :提交时的说明文字;

        (4)-p :在commit时,将容器暂停。

        镜像提交示例如下:

docker commit -a "rdfast" -m "aigc base" 2c5 aigc:v1

2.5 docker创建与运行示例

        根据前文描述,我们主要运行下面三条命令进行docker创建与运行。

docker pull ubuntu:18.04
docker run -d -it -p 1088:8888 -p 1022:22 -p 1059:5900 -v /server/data:/docker/data --gpus all --shm-size="32g" ubuntu:18.04 /bin/bash
docker exec -it countainerID /bin/bash

        下文各种环境的安装可以在主机上运行,也可以在docker中进行,安装步骤和方法完全一致。

3 CUDA安装与验证

        ChatGPT、Stable Diffusion等大模型属于相对较新的模型,所以依赖的Pytorch经常为torch1.12以上版本。相应的CUDA版本则至少为CUDA 11.3,并且显卡驱动对应的CUDA版本号不能小于CUDA库的版本号。由于上述主机已安装CUDA 11.8驱动,docker内安装不大于11.8版本的CUDA都是可以的。下面以CUDA 11.3安装为例。

3.1 容器内基本环境安装

        以上docker的容器安装了一个基础的ubuntu 18.04系统,现在需要安装一些基本环境,命令如下所示。

apt-get update
apt-get install ssh vim gcc cmake build-essential -y

3.2 CUDA驱动下载与安装

        CUDA下载地址为“https://developer.nvidia.com/cuda-toolkit-archive”,页面如下所示,选择“CUDA Toolkit 11.3.0 (April 2021), Versioned Online Documentation”。

        选择CUDA 11.3之后继续选择系统类型和下载文件,如下图所示。选择完成之后会显示出runfile下载地址和安装方式,即“wget https://developer.download.nvidia.com/compute/cuda/11.3.0/local_installers/cuda_11.3.0_465.19.01_linux.run”和“sudo sh cuda_11.3.0_465.19.01_linux.run”。

         输入sh cuda_11.3.0_465.19.01_linux.run安装时,在安装选项页面用回车和上下键选择安装内容,注意不要选择驱动(驱动已经在此之前安装过了),如下图所示。其中,前面的“X”表示已选择的将要安装内容。

 3.3 环境变量配置

        待安装完成之后,采用如下命令进行环境变量设置。

export CUDA_HOME=/usr/local/cuda
export PATH=/usr/local/cuda-11.3/bin:$PATH
export LD_LIBRARY_PATH=/usr/lcoal/cuda-11.3/lib64:$LD_LIBRARY_PATH
source ~/.bashrc
nvcc -V

        运行“nvcc -V”后输出如下内容。

3.4 CUDA安装验证

        在命令行分别输入如下内容验证CUDA是否安装成功。

        (1)cd /usr/local/cuda/samples/1_Utilities/deviceQuery

        (2)make

        (3)./deviceQuery

        运行上述命令后,终端界面会有如下输出。如果终端界面最后输出“PASS”,则表示CUDA套件已经成功安装。

        如果CUDA套件版本号大于驱动版本号,则有可能提示如下错误。

cudaGetDeviceCount returned 35
-> CUDA driver version is insufficient for CUDA runtime version
Result = FAIL

4 CUDNN安装与验证

4.1 cuDNN下载

        cuDNN安装文件下载官网地址为“https://developer.nvidia.com/rdp/cudnn-archive”,需要注册后才能下载。cuDNN版本依赖于CUDA架构版本,即需要与上一步安装的CUDA组件相对应。这里我们下载适合CUDA 11.3的cuDNN,即Download cuDNN v8.2.0 (April 23rd, 2021), for CUDA 11.x,并且系统版本为ubuntu 18.04(根据实际情况选择相应系统版本),如下图所示。

        由于cuDNN需要注册登录账号才能下载,所以无法通过wget指令直接进行下载,需要通过浏览器页面下载对应安装文件。其中,cuDNN安装文件包括以下4个部分:

  1. cuDNN Library for Linux (x86_64)
  2. cuDNN Runtime Library for Ubuntu18.04 (Deb)
  3. cuDNN Developer Library for Ubuntu18.04 (Deb)
  4. cuDNN Code Samples and User Guide for Ubuntu18.04 (Deb)

4.2 cuDNN安装

        Linux cuDNN库(cuDNN Library for Linux)是一个压缩文件,通过终端指令“tar -zxvf cudnn-11.3-linux-x64-v8.2.0.53.tgz”进行解压。cuDNN Library解压结果需要复制到CUDA安装目录,相应指令为“cp cuda/include/cudnn.h /usr/local/cuda/include/”、“cp cuda/lib64/libcudnn* /usr/local/cuda/lib64/”。复制后的库文件需进一步增加权限,其指令为“chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*”。

        剩下三个Deb文件(cuDNN Runtime Library for Ubuntu18.04(Deb)、cuDNN Developer Library for Ubuntu18.04(Deb)、cuDNN Code Samples and User Guide for Ubuntu18.04(Deb))采用dpkg命令进行安装,分别输入指令“dpkg -i libcudnn8_8.2.0.53-1+cuda11.3_amd64.deb”、“dpkg -i libcudnn8-dev_8.2.0.53-1+cuda11.3_amd64.deb ”和“dpkg -i libcudnn8-samples_8.2.0.53-1+cuda11.3_amd64.deb”。

        如果报如下不是软连接(not a symbolic link)的错,那么通过ln -sf命令逐一创建软连接即可。

/sbin/ldconfig.real: /usr/local/cuda-11.3/targets/x86_64-linux/lib/libcudnn_adv_train.so.8 is not a symbolic link
/sbin/ldconfig.real: /usr/local/cuda-11.3/targets/x86_64-linux/lib/libcudnn_cnn_infer.so.8 is not a symbolic link
/sbin/ldconfig.real: /usr/local/cuda-11.3/targets/x86_64-linux/lib/libcudnn.so.8 is not a symbolic link
/sbin/ldconfig.real: /usr/local/cuda-11.3/targets/x86_64-linux/lib/libcudnn_ops_train.so.8 is not a symbolic link
/sbin/ldconfig.real: /usr/local/cuda-11.3/targets/x86_64-linux/lib/libcudnn_ops_infer.so.8 is not a symbolic link
/sbin/ldconfig.real: /usr/local/cuda-11.3/targets/x86_64-linux/lib/libcudnn_cnn_train.so.8 is not a symbolic link
/sbin/ldconfig.real: /usr/local/cuda-11.3/targets/x86_64-linux/lib/libcudnn_adv_infer.so.8 is not a symbolic link

        解决方案如下:

ln -sf /usr/local/cuda-11.3/targets/x86_64-linux/lib/libcudnn_adv_train.so.8.2.0 /usr/local/cuda-11.3/targets/x86_64-linux/lib/libcudnn_adv_train.so.8
ln -sf /usr/local/cuda-11.3/targets/x86_64-linux/lib/libcudnn_cnn_infer.so.8.2.0 /usr/local/cuda-11.3/targets/x86_64-linux/lib/libcudnn_cnn_infer.so.8
ln -sf /usr/local/cuda-11.3/targets/x86_64-linux/lib/libcudnn.so.8.2.0 /usr/local/cuda-11.3/targets/x86_64-linux/lib/libcudnn.so.8
ln -sf /usr/local/cuda-11.3/targets/x86_64-linux/lib/libcudnn_ops_train.so.8.2.0 /usr/local/cuda-11.3/targets/x86_64-linux/lib/libcudnn_ops_train.so.8
ln -sf /usr/local/cuda-11.3/targets/x86_64-linux/lib/libcudnn_ops_infer.so.8.2.0 /usr/local/cuda-11.3/targets/x86_64-linux/lib/libcudnn_ops_infer.so.8
ln -sf /usr/local/cuda-11.3/targets/x86_64-linux/lib/libcudnn_cnn_train.so.8.2.0 /usr/local/cuda-11.3/targets/x86_64-linux/lib/libcudnn_cnn_train.so.8
ln -sf /usr/local/cuda-11.3/targets/x86_64-linux/lib/libcudnn_adv_infer.so.8.2.0  /usr/local/cuda-11.3/targets/x86_64-linux/lib/libcudnn_adv_infer.so.8

4.3 cuDNN安装验证

        经过以上步骤,cuDNN相关文件已经全部完成安装,在命令行分别输入如下内容验证cuDNN是否安装成功。

        (1)cd /usr/src/cudnn_samples_v8/mnistCUDNN/

        (2)make clean && make

        (3)./mnistCUDNN

        运行上述命令后,终端界面会有如下输出。如果终端界面最后输出“Test passed”,则表示cuDNN套件已经成功安装。

        如果提示如下错误,那么解决方法为“apt-get install libfreeimage3 libfreeimage-dev -y”。

rm -rf *orm -rf *o
rm -rf mnistCUDNN
CUDA_VERSION is 11030
Linking agains cublasLt = true
CUDA VERSION: 11030
TARGET ARCH: x86_64
HOST_ARCH: x86_64
TARGET OS: linux
SMS: 35 50 53 60 61 62 70 72 75 80 86
test.c:1:10: fatal error: FreeImage.h: No such file or directory
 #include "FreeImage.h"
          ^~~~~~~~~~~~~
compilation terminated.
>>> WARNING - FreeImage is not set up correctly. Please ensure FreeImage is set up correctly.

5 conda Python环境安装

5.1 Python Miniconda安装

        Python环境可以通过conda进行管理,相应的安装软件有Anaconda和Miniconda。相比之下,Miniconda是一款小巧的Python环境管理工具,安装包大约只有50MB。就管理Python环境而言,Miniconda和Anaconda的使用方式几乎没有任何区别。Miniconda安装文件的下载地址为“https://docs.conda.io/en/latest/miniconda.html”。

        这里选择python 3.8版本,wget下载方式为“wget https://repo.anaconda.com/miniconda/Miniconda3-py38_23.1.0-1-Linux-x86_64.sh”。安装步骤如下,安装过程需要选择“yes or no”的地方均输入“yes”。

bash Miniconda3-py38_23.1.0-1-Linux-x86_64.sh
source ~/.bashrc

5.2 conda使用

        (1)查看安装包:conda list

        (2)查看虚拟环境:conda env list

        (3)创建虚拟环境:conda create -n env_name python=3.9

        (4)安装包:conda install -n env_name [package]

        (5)激活环境:conda activate env_name

5.3 jupyter notebook 安装

        jupyter notebook是一种基于web的Python开发环境,可通过默认可“IP:8888”或“127.0.0.1:8888”或“localhost:8888”。如果docker创建时指定了主机端口映射,如“-p 1088:8888”,那么可将端口号替换成1088进行访问。主机允许端口号防火墙的命令为“sudo ufw allow端口号”。安装步骤及配置过程如下:

        (1) 安装命令为“conda install jupyter notebook”。

        (2) 生成配置文件,jupyter notebook --generate-config,运行该命令后会在根目录下生成配置文件,如“/root/.jupyter/jupyter_notebook_config.py”。修改配置文件中如下内容。端口号也可以在配置文件中进行修改。 

c.NotebookApp.allow_remote_access = True
c.NotebookApp.allow_root = True
c.NotebookApp.ip = '0.0.0.0'

        (3) 设置登录密码,jupyter notebook password。

        (4) 运行命令为“jupyter notebook”,但是关闭终端时会中断运行,可以采用nohup命令来保持运行,即“nohup jupyter notebook &”。

6 ssh服务安装与配置

        以上docker 容器是通过命令“docker exec -it containerID /bin/bash”进入的,配置ssh服务后,docker也可以通过ssh直接远程访问。

  1. 安装ssh服务:apt-get update,apt-get install ssh -y。
  2. 启动服务:service ssh start。
  3. 关闭服务:service ssh stop。
  4. 注意事项:将/etc/ssh/sshd_config文件中PermitRootLogin 设为yes,否则有可能出现权限问题。
  5. 重启服务:service ssh restart。
  6. 查看服务是否正常运行:service ssh status。
  7. 为系统设置密码,命令为“passwd”。

        这样就可以通过ssh访问docker了,如果docker创建时设置了1022端口映射,那么即可通过该端口进行ssh连接。

7 全部命令

docker pull ubuntu:18.04
docker run -d -it -p 1088:8888 -p 1022:22 -p 1059:5900 -v /server/data:/docker/data --gpus all --shm-size="32g" ubuntu:18.04 /bin/bash
docker exec -it containerID /bin/bash
apt-get update
apt-get install ssh vim gcc cmake build-essential -y
wget https://developer.download.nvidia.com/compute/cuda/11.3.0/local_installers/cuda_11.3.0_465.19.01_linux.run
sh cuda_11.3.0_465.19.01_linux.run
export CUDA_HOME=/usr/local/cuda
export PATH=/usr/local/cuda-11.3/bin:$PATH
export LD_LIBRARY_PATH=/usr/lcoal/cuda-11.3/lib64:$LD_LIBRARY_PATH
source ~/.bashrc
nvcc -V
cd /usr/local/cuda/samples/1_Utilities/deviceQuery
make
./deviceQuery
tar -zxvf cudnn-11.3-linux-x64-v8.2.0.53.tgz
cp cuda/include/cudnn.h /usr/local/cuda/include/
cp cuda/lib64/libcudnn* /usr/local/cuda/lib64/
chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*
ln -sf /usr/local/cuda-11.3/targets/x86_64-linux/lib/libcudnn_adv_train.so.8.2.0 /usr/local/cuda-11.3/targets/x86_64-linux/lib/libcudnn_adv_train.so.8
ln -sf /usr/local/cuda-11.3/targets/x86_64-linux/lib/libcudnn_cnn_infer.so.8.2.0 /usr/local/cuda-11.3/targets/x86_64-linux/lib/libcudnn_cnn_infer.so.8
ln -sf /usr/local/cuda-11.3/targets/x86_64-linux/lib/libcudnn.so.8.2.0 /usr/local/cuda-11.3/targets/x86_64-linux/lib/libcudnn.so.8
ln -sf /usr/local/cuda-11.3/targets/x86_64-linux/lib/libcudnn_ops_train.so.8.2.0 /usr/local/cuda-11.3/targets/x86_64-linux/lib/libcudnn_ops_train.so.8
ln -sf /usr/local/cuda-11.3/targets/x86_64-linux/lib/libcudnn_ops_infer.so.8.2.0 /usr/local/cuda-11.3/targets/x86_64-linux/lib/libcudnn_ops_infer.so.8
ln -sf /usr/local/cuda-11.3/targets/x86_64-linux/lib/libcudnn_cnn_train.so.8.2.0 /usr/local/cuda-11.3/targets/x86_64-linux/lib/libcudnn_cnn_train.so.8
ln -sf /usr/local/cuda-11.3/targets/x86_64-linux/lib/libcudnn_adv_infer.so.8.2.0  /usr/local/cuda-11.3/targets/x86_64-linux/lib/libcudnn_adv_infer.so.8
dpkg -i libcudnn8_8.2.0.53-1+cuda11.3_amd64.deb
dpkg -i libcudnn8-dev_8.2.0.53-1+cuda11.3_amd64.deb
dpkg -i libcudnn8-samples_8.2.0.53-1+cuda11.3_amd64.deb
apt-get install libfreeimage3 libfreeimage-dev -y
cd /usr/src/cudnn_samples_v8/mnistCUDNN/
make clean && make
./mnistCUDNN
wget https://repo.anaconda.com/miniconda/Miniconda3-py38_23.1.0-1-Linux-x86_64.sh
bash Miniconda3-py38_23.1.0-1-Linux-x86_64.sh
source ~/.bashrc
conda install jupyter notebook
jupyter notebook --generate-config
vi /root/.jupyter/jupyter_notebook_config.py
c.NotebookApp.allow_remote_access = True
c.NotebookApp.allow_root = True
c.NotebookApp.ip = '0.0.0.0'
jupyter notebook password
nohup jupyter notebook &
apt-get update
apt-get install ssh -y
service ssh start
service ssh stop
vi /etc/ssh/sshd_config
PermitRootLogin yes
service ssh restart
service ssh status
passwd

本文所述方法和步骤基本上是通用的,不局限于AIGC大模型深度学习环境。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/445777.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Go语言之反射(反射的简单使用,原理)

一、反射的基础 1.什么是反射 Go语言中,反射的机制就是在运行的时候,可以获取到其变量的类型和值,且可以对其类型和值进行检查,对其值进行修改。即在不知道具体的类型的情况下,可以用反射机制来查看变量类型、更新变…

50 Projects 50 Days - Hidden Search Widget 学习记录

项目地址 Hidden Search Widget 展示效果 Hidden Search Widget 实现思路 点击搜索按钮,展开输入框,主要元素就两个:input输入框和button,这两个本身就是行内元素。点击触发的动作拆分为两个,第一个是input输入框…

Vue核心 事件处理

1.8. 事件处理 1.8.1.事件的基本使用: 使用v-on:xxx或**xxx**绑定事件,其中 xxx 是事件名事件的回调需要配置在methods对象中,最终会在vm上methods中配置的函数,不要用箭头函数,否则this就不是vm了methods中配置的函数&#xff…

手撕Twitter推荐算法

Twitter近期开源了其推荐系统源码[1,2,3],截止现在已经接近36k star。但网上公开的文章都是blog[1]直译,很拗口,因此特地开个系列系统分享下。系列涵盖: Twitter整体推荐系统架构:涵盖图数据挖掘、召回、精排、规则多…

ActiveMQ使用

一、什么是消息中间件 消息中间件顾名思义实现的就是在两个系统或两个客户端之间进行消息传送 二、什么是ActiveMQ ActiveMQ是一种开源的基于JMS(Java Message Servie)规范的一种消息中间件的实现,ActiveMQ的设计目标是提供标准的&#xff0c…

HCIP之VLAN

目录 网络的三层架构 接入层 无线的缺陷: 上网用户数量增多,网络卡顿的原因 CSMA/CD --- 载波侦听多路访问/冲突检测 CSMA/CA --- 载波侦听多路访问/冲突避免 无线网络没有使用冲突检测技术的原因 汇聚层 连接两条线路的原因 核心层 VLAN VLAN配…

数字设计笔试Verilog手撕代码 - 无符号浮点加法器

前言 今天在网上看笔试题发现有个设计浮点累加器的题目,看了下题目说明感觉不太清楚,恰好记得之前做过浮点数的加法运算的设计,索性就改了下题目需求,作为一个小练习在重新设计一遍。具体设计要求如下: 设计需求 设…

Java锁策略-Java多线程(4)

(各位观众老爷下午好, 创作不易勒, 大家多多点赞收藏😘) 咱们废话不多讲, 下面细🔒 目录 前言 乐观锁 VS 悲观锁 乐观锁 悲观锁 悲观乐观锁优缺点 轻量级锁 VS 重量级锁 重量级锁 轻量级锁 读写锁 自旋锁 互斥锁 可重入锁 VS 不可重入锁 死…

IPSCE

文章目录 1.什么是数据认证,有什么作用,有哪些实现的技术手段?2.什么是身份认证,有什么作用,有哪些实现的技术手段?3.什么VPN技术?4.VPN技术有哪些分类?5.IPSEC技术能够提供哪些安全服务?6.IPSEC的技术架构是什么?7.AH与ESP…

今天面了个字阿里拿38K出来的,真是纹身师闭眼,秀了我一脸啊

公司前段缺人,也面了不少测试,前面一开始瞄准的就是中级的水准,也没指望来大牛,提供的薪资在15-20k,面试的人很多,但平均水平很让人失望。看简历很多都是4年工作经验,但面试中,不提测…

8.java程序员必知必会类库之嵌入式SQL数据库

前言 嵌入式内存数据库,作为嵌入到应用内部的数据库,在正常生产业务流程中使用不多。现在一般公司通用架构都是应用和数据分离,解耦数据和应用。但是,在某些特殊场景中,这种嵌入式数据库是比较好的选择。 在某些单元…

如何在开发阶段保证软件工程质量 (程序员要做些什么)

前言 大家常说:“代码和人,有一个能跑就行”,但这并不意味着我们可以放弃职业道德。与土木工程一样,软件工程也需要一些可度量的指标来衡量产品的交付质量。一个高质量的软件绝对不能只靠测试人员来保证,更不能相信程…

在SaleSmartly(ss客服)中为Messenger 提供无缝支持体验

客户希望您在他们所在的地方与他们见面,这意味着打开多个沟通渠道。但是,当您通过电子邮件、实时聊天、社交等方式进行通信时,对话很容易丢失、被忽视和杂乱无章。 而Messenger的受欢迎程度,以及Meta的无所不在,使Face…

每日学术速递4.18

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.CV 1.Inpaint Anything: Segment Anything Meets Image Inpainting 标题:Inpaint Anything:分割任何东西满足图像修复 作者:Tao Yu, Runseng Feng, R…

企业用户如何选择合适的服务器配置方法教程

随着互联网信息的飞速发展,任何企业都脱离不了互联网,越来越多的企业都通过互联网实施无纸化的办公,互联网推广一体化整体型推广、互联网电子商务。中小型企业网站如何选购云服务器配置呢?但是,实现这些的最最基础的条…

ai改写句子软件-ai改写

AI免费伪原创:助力网站内容升级 您是否曾经为网站优化而烦恼,无论是内容更新还是SEO优化,都需要大量的时间和精力。但是,您是否知道,现在有一款能够使用AI技术来帮助您完成这些任务,而且还是免费的呢&…

【Git 学习】

Git 学习 一、Git的使用1. Git下载安装2. Git 命令3. Git推送代码步骤4. Git基本工作流程5. Git历史版本切换6. Git分支管理6.1 创建新分支6.2 切换分支6.3 合并分支6.4 删除分支 7. 远程仓库的工作流程7.1 具体流程 8.推送到远程仓库9. 代码冲突问题10. IDEA 集成Git10.1 版本…

说说webpack的构建流程?

① 初始化流程 从配置文件和 Shell 语句中读取与合并参数,并初始化需要使用的插件和配置插件等执行环境所需要的参数。 配置文件默认下为 webpack.config.js,也可以通过命令的形式指定配置文件; 主要作用是用于激活webpack的加载项和插件&am…

手写axios源码系列一:axios核心知识点

文章目录 axios的核心功能1、axios 函数对象2、dispatchRequest 发送请求3、interceptors 拦截器4、cancelToken 取消请求 最近从头搭建了一个vue小项目,想使用 axios 作为请求接口的第三方库。结果使用了 axios 这么长时间,想封装一下 axios &#xff0…

Nacos2.2.2开启鉴权配置

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、更改application.properties中的配置二、修改配置 前言 最近公司开启了一个新的电商项目,项目中用到了Naocs作为注册中心和配置中心&#xff0…