VMamba 安装教程(无需更改base环境中的cuda版本)

导航

安装教程导航

  • Mamba 及 Vim 安装问题参看本人博客:Mamba 环境安装踩坑问题汇总及解决方法(初版)
  • Linux 下Mamba 及 Vim 安装问题参看本人博客:Mamba 环境安装踩坑问题汇总及解决方法(重置版)
  • Windows 下 Mamba 的安装参看本人博客:Window 下Mamba 环境安装踩坑问题汇总及解决方法 (无需绕过selective_scan_cuda)
  • Linux 下 Vim 安装问题参看本人博客:Linux 下 Vim 环境安装踩坑问题汇总及解决方法(重置版)
  • Windows 下 Vim 安装问题参看本人博客:Window 下 Vim 环境安装踩坑问题汇总及解决方法
  • Linux 下Vmamba 安装教程参看本人博客:Vmamba 安装教程(无需更改base环境中的cuda版本)
  • Windows 下 VMamba的安装参看本人博客:Windows 下 VMamba 安装教程(无需更改base环境中的cuda版本且可加速)
  • Windows下 Mamba2及高版本 causal_conv1d 安装参考本人博客:Windows 下Mamba2 环境安装问题记录及解决方法(causal_conv1d=1.4.0)
  • Windows 下 Mamba / Vim / Vmamba 环境安装终极版参考本人博客:Windows 下Mamba2 / Vim / Vmamba 环境安装问题记录及解决方法终极版(无需绕过triton)

旧安装包合集导航

  • Mamba 安装教程博客中涉及到的全部安装包:mamba 安装包,包括Windows和Linux(此版本为初始mamba版本)
  • Vim 安装教程博客中涉及到的全部安装包:vim 安装包,包括Windows和Linux(此版本有时需要绕过triton,但不影响计算)
  • Vmamba 安装教程博客中涉及到的全部安装包:vmamba 安装包,包括Windows和Linux(此版本有时需要绕过triton,但不影响计算)
  • Mamba2 及 更高版本causal_conv1d Windows安装包:mamba 2 windows安装包(此版本Mamba2需要绕过triton,但不影响计算)

Windows安装包终极版合集导航

  • mamba 2 windows (cuda12.4)安装包
  • Vim windows (cuda12.4)安装包
  • Vmamba Windows (cuda12.4)环境安装包

目录

  • 导航
    • 安装教程导航
    • 旧安装包合集导航
    • Windows安装包终极版合集导航
  • 背景
  • Linux 下正确安装命令
    • CUDA 12.1
    • CUDA 11.8
    • 最后一步编译不成功
  • 报错及解决(20240714)
    • 1. 基本报错信息
    • 2. CUDA version mismatch
    • 3. fatal error: cusparse.h
      • 网传方法
      • 解决方法
      • 注意事项
    • 4. fatal error: cublas_v2.h
    • 5. fatal error: cusolverDn.h
    • 6. fatal error: crypt.h
      • 网传方法
      • 解决方法
    • 7. fatal error: cuda_runtime.h
  • 报错及解决(20240715)
    • 8. 正常安装 Vmamba 找不到找不到 selective_scan_cuda 模块
    • 9. 无法导入selective_scan_cuda_oflex和selective_scan_cuda_core模块
    • 10. 正常安装 Vmamba 找不到 selective_scan_cuda_core 模块
    • 11. g++ 版本不支持
    • 12. fatal error: cuda_bf16.h:
  • 报错及解决(20240913)
    • 13. RuntimeError:CUDA error:no kernel image is available
  • 关于whl付费的说明

背景

最近有不少小伙伴在 Linux 上安装 VMamba (VMamba: Visual State Space Model)时,按照官方的安装命令会遇到各种各样的错误,部分错误可以按照 Mamba 以及 Vim 中相似的方法进行处理(参考笔者之前的博客:Mamba 环境安装踩坑问题汇总及解决方法),但是有些问题无法解决,特此汇总。注意,即使base环境中安装的 CUDA 版本过低,也不影响 Mamba,Vim 以及 VMamba 环境的正常安装。

本文涉及到的所有文件均可在:vmamba 安装包,包括Windows和Linux下载。

安装问题 / 资源自取售后 / 论文合作想法请+vx931744281

Linux 下正确安装命令

运行之前需要下载好 Vmamba 官方的源码,用 git 下载方式如下:

git clone https://github.com/MzeroMiko/VMamba.git

下面分别是 CUDA 12.1 和 CUDA 11.8 两种环境的安装,由于此时 CUDA 的内核以及相关文件均安装在虚拟环境中,可以不考虑base环境里 CUDA 的版本。具体安装哪个版本由读者自由选择。环境安装成功的关键是最后一步是否能编译成功。

CUDA 12.1

conda create -n vmamba python=3.10
conda activate vmamba
conda install cuda-nvcc==12.1.105
pip install -r requirements.txt
conda install nvidia/label/cuda-12.1.0::libcusparse-dev  # 可选,根据最后一步报错
conda install nvidia/label/cuda-12.1.0::libcublas-dev  # 可选,根据最后一步报错
conda install nvidia/label/cuda-12.1.0::libcusolver-dev  # 可选,根据最后一步报错
conda install libxcrypt  # 可选,根据最后一步报错
cd kernels/selective_scan && pip install .

CUDA 11.8

conda create -n vmamba python=3.10
conda activate vmamba
conda install cudatoolkit==11.8
pip install torch==2.1.1 torchvision==0.16.1 torchaudio==2.1.1 --index-url https://download.pytorch.org/whl/cu118
pip install setuptools==68.2.2
conda install -c "nvidia/label/cuda-11.8.0" cuda-nvcc
pip install -r requirements.txt
conda install nvidia/label/cuda-11.8.0::cuda-cudart-dev  # 可选,根据最后一步报错
conda install nvidia/label/cuda-11.8.0::libcusparse-dev  # 可选,根据最后一步报错
conda install nvidia/label/cuda-11.8.0::libcublas-dev  # 可选,根据最后一步报错
conda install nvidia/label/cuda-11.8.0::libcusolver-dev  # 可选,根据最后一步报错
cd kernels/selective_scan && pip install .

最后一步编译不成功

其中的部分命令实际是根据最后一步报错倒推的,根据大家实际环境的不同因人而异。最后一步的 selective_scan 笔者已经打包出 whl 安装包,见 selective-scan-0.0.2-cp310-cp310-linux-x86-64.whl (CUDA 12.1 不含core)。可联系本人vx自取售后,安装命令为:

pip install selective_scan-0.0.2-cp310-cp310-linux_x86_64.whl

selective-scan(CUDA 11.8 包含selective_scan_core)的whl 为:selective-scan(CUDA 11.8 包含core)
selective-scan(CUDA 12.1 包含selective_scan_core)的whl 为:selective-scan(CUDA 12.1 包含core)

报错及解决(20240714)

几乎所有的报错都集中在最后一步的编译上,总结如下。

1. 基本报错信息

出现报错:

Building wheels for collected packages: selective_scan
  Building wheel for selective_scan (setup.py) ... error
  error: subprocess-exited-with-error
  
  × python setup.py bdist_wheel did not run successfully.
  │ exit code: 1
  ╰─> [61 lines of output]
      
      
      torch.__version__  = 2.3.1+cu121

...
...
...

 [end of output]
  
  note: This error originates from a subprocess, and is likely not a problem with pip.
  ERROR: Failed building wheel for selective_scan
  Running setup.py clean for selective_scan
Failed to build selective_scan
ERROR: Could not build wheels for selective_scan, which is required to install pyproject.toml-based projects

只有编译过程中出现错误,就会以这种输出结尾。因此,本段输出开头和结尾的报错信息毫无用处,需要重点查看中间部分的报错输出。如以下画框部分。
请添加图片描述

2. CUDA version mismatch

报错如下:

      RuntimeError:
      The detected CUDA version (11.8) mismatches the version that was used to compile
      PyTorch (12.1). Please make sure to use the same CUDA versions.

原因是 CUDA 版本和 PyTorch 支持的CUDA版本不一致。解决方案为 升高 CUDA 版本降低 PyTorch 支持的版本,即:

conda uninstall cudatoolkit  # 如果之前装了cudatoolkit,先卸载;其最高版本只有11.8
conda install cuda-nvcc==12.1.105

或者先卸载高版本的pytorch,然后

pip install torch==2.1.1 torchvision==0.16.1 torchaudio==2.1.1 --index-url https://download.pytorch.org/whl/cu118

注意,不指定 index-url 会默认安装CUDA最新版本的pytorch。

3. fatal error: cusparse.h

出现报错 fatal error: cusparse.h: No such file or directory,如下:

....
xxxx/vmamba/lib/python3.10/site-packages/torch/include/ATen/cuda/CUDAContextLight.h:7:10: fatal error: cusparse.h: No such file or directory
          7 | #include <cusparse.h>
            |          ^~~~~~~~~~~~
      compilation terminated.

网传方法

网上有些博客的方法治标不治本,例如:

  • 使用下列指令指定后解决问题: export CUDA_HOME=/usr/local/cuda-10.2;(博客:Cuda 程序编译报错: fatal error: cusparse.h: No such file or directory)
  • 修改文件~/.bashrc里的几个export PATH;(博客:有效解决OSError: libcusparse.so.11: cannot open shared object file: No such file or directory)
  • 将缺少的 cusparse.h 下载放入对应目录;(博客:cusparse.h: No such file or directory compilation terminated.)

解决方法

解决方法是安装相关的环境,有两种解决方法:

  • 在Linux环境下安装相关的包(不推荐且无必要,一般需要管理员权限),即 apt-get install cuda-cusparse-dev-10-1 (博客:fatal error: cusparse.h: No such file or directory compilation terminated. error: command ‘/usr/loca)。注意:cuda11起包名改成了libcusparse,因此,命令应改为:apt-get install libcusparse-dev-11-8 (博客:矩池云上缺少cusparse.h头文件解决方法)
  1. 更好的解决方法是利用 conda 安装 libcusparse-dev 来解决,笔者发现,在 Anaconda 官方网站中,在 nvidia 仓库 下面存在合适的包可供下载,它们将 CUDA 的各个核心算子都写成了可供 conda 安装的包。因此,缺少什么CUDA头文件,均可以从这个仓库里找到合适的包。因此,此处的命令是:conda install nvidia/label/cuda-12.1.0::libcusparse-dev

注意事项

如果用 conda install 下载缓慢,可以先去仓库下载到本地,再使用 conda install --use-local xxx.bz2,其他的包也是类似安装。

4. fatal error: cublas_v2.h

出现报错 fatal error: cublas_v2.h: No such file or directory,如下:

....
xxxx/vmamba/lib/python3.10/site-packages/torch/include/ATen/cuda/CUDAContextLight.h:7:10: fatal error: cublas_v2.h: No such file or directory
            | #include <cublas_v2.h>
            |          ^~~~~~~~~~~~
      compilation terminated.

原因同报错3,因此解决方法为:conda install nvidia/label/cuda-12.1.0::libcublas-dev

5. fatal error: cusolverDn.h

出现报错 fatal error: cusolverDn.h: No such file or directory,如下:

....
xxxx/vmamba/lib/python3.10/site-packages/torch/include/ATen/cuda/CUDAContextLight.h:7:10: fatal error: cusolverDn.h: No such file or directory
            | #include <cusolverDn.h>
            |          ^~~~~~~~~~~~
      compilation terminated.

原因同报错3,因此解决方法为:conda install nvidia/label/cuda-12.1.0::libcusolver-dev

6. fatal error: crypt.h

出现报错 fatal error: crypt.h: No such file or directory,原因同报错3,但此时 nvidia 下已经找不到对应的包了,出现报错的位置变成了 Python。

网传方法

有的博客先在Ubuntu中使用apt命令安装必要的库,针对虚拟环境调整文件路径,以及通过conda-forge渠道安装libxcrypt。(博客:crypt.h:No such file or directory 亲测)

方法较为复杂,不推荐且无必要,一般需要管理员权限。

解决方法

受网上博客最后一步启发,在Anaconda 官方网站 conda-forge 仓库 发现了一个包——libxcrypt,因此解决方法为:conda install libxcrypt

7. fatal error: cuda_runtime.h

配置 CUDA 11.8 版本时,发现最后一步编译出现错误,fatal error: cuda_runtime.h: No such file or directory

....
cc1plus: fatal error: cuda_runtime.h: No such file or directory
      compilation terminated.

参考博客 如何在anaconda环境中安装cuda.h和cuda_runtime.h,得到具体的anaconda环境下的解决方法:

conda install nvidia/label/cuda-11.8.0::cuda-cudart-dev  # 根据CUDA版本

报错及解决(20240715)

8. 正常安装 Vmamba 找不到找不到 selective_scan_cuda 模块

VMamba 中遇到selective_scan_cuda 模块

  • No module named 'selective_scan_cuda'

VMamba 的代码和 Mamba 是独立的,如果想有 selective_scan_cuda 包,则需要安装 mamba_ssm,参考之前博客:

  • Linux:Mamba 环境安装踩坑问题汇总及解决方法
  • Windows :Window 下Mamba 环境安装踩坑问题汇总及解决方法 (无需绕过selective_scan_cuda)

注意,mamba 的这个包在Vmamba里面不是必须的。

9. 无法导入selective_scan_cuda_oflex和selective_scan_cuda_core模块

同时出现以上报错,一般因为安装的是Mamba 而不是 VMamba,Mamba 安装成功后环境中本来就没有selective_scan_cuda_oflex和selective_scan_cuda_core模块,请按前文 Vmamba 正确的顺序安装 Vmamba的环境。

10. 正常安装 Vmamba 找不到 selective_scan_cuda_core 模块

除了selective_scan_cuda_core 模块,还有可能找不到 selective_scan_cuda_nrow 模块,这是因为在编译 selective_scan 时,在 setup.py 第40行选用的模式只有 [‘oflex’]

MODES = ["oflex"]
# MODES = ["core", "ndstate", "oflex"]
# MODES = ["core", "ndstate", "oflex", "nrow"]

改为:

MODES = ["core", "oflex"]
# MODES = ["core", "ndstate", "oflex"]
# MODES = ["core", "ndstate", "oflex", "nrow"]

修改此处再编译即可。注意,该模块也不是必须的。而ndstate 在最新代码中源文件已经被删除,默认模式即可,不需要修改。

selective-scan(CUDA 11.8 包含selective_scan_core)的whl 为:selective-scan(CUDA 11.8 包含core)
selective-scan(CUDA 12.1 包含selective_scan_core)的whl 为:selective-scan(CUDA 12.1 包含core)

11. g++ 版本不支持

出现报错 RuntimeError: The current installed version of g++ (4.8.5) is less than the minimum required version,具体为:

 RuntimeError: The current installed version of g++ (4.8.5) is less than the minimum required version by CUDA 11.7 (6.0.0). Please make sure to use an adequate version of g++ (>=6.0.0, <=11.5.0).

如下图

在这里插入图片描述
原因很明显,base 环境里的 gcc 版本老旧,而一般升级版本需要root权限,参考博客:

  • conda环境内安装gcc4.8.5(无root权限)
  • Linux系统 利用conda更改gcc、g++版本(非root用户)

解决方法依然是利用 conda 在虚拟环境中安装相关的包,在anaconda库中找到合适的 gcc包 和 g++包,譬如可以选择8.5.0版本

conda install conda-forge::gcc=8.5.0
conda install conda-forge::gxx=8.5.0

输入命令gcc-vg++ -v 查看识别到的 gcc 以及 g++版本,如版本还是原来的,则增加环境变量至 .bashrc,通过 vim ~/.bashrc 打开编辑,添加:

export PATH=/home/xxx/.conda/envs/xxx/bin:$PATH

12. fatal error: cuda_bf16.h:

发现最后一步编译出现错误,fatal error: cuda_bf16.h: No such file or directory,此类问题,执行

conda install nvidia/label/cuda-11.8.0::cuda-cudart-dev  # 根据CUDA版本

即可。

报错及解决(20240913)

13. RuntimeError:CUDA error:no kernel image is available

正常安装 Vmamba/ Mamba 后出现以下报错:

RuntimeError:CUDA error:no kernel image is available for execution on the device
CUDA kernel errors might be asynchronously reported at some other API call, so ther stacktrace below might be incorrect.

原因是显卡太老了(譬如有的读者使用的是GTX 1080 甚至GTX 1070 显卡),causal-conv1dmamba-ssm 以及 vmamba 均暂时不支持算力为6.1的设备。解决方法参考下面的博客:

  1. 解决装完mamba运行时报错RuntimeError:CUDA error:no kernel image is available for execution on the device
  2. Ubuntu下VMamba环境1080ti显卡踩坑问题和解决

即,修改这三个包的 setup.py,在代码段

cc_flag.extend(["-gencode", "arch=compute_70,code=sm_70"])
cc_flag.extend(["-gencode", "arch=compute_80,code=sm_80"])

之上插入:

cc_flag.append("-gencode")
cc_flag.append("arch=compute_60,code=sm_60")

或者

cc_flag.extend(["-gencode", "arch=compute_60,code=sm_60"])

然后再次重新按照前文的方法编译,不过官方提示太老的版本可能会对性能产生影响,建议最好更新设备。

关于whl付费的说明

  1. 无论是Linux还是Win,在这些平台下面的Mamba,Vim 以及Vmamba 编译过程以及所有可能遇到的问题已经在本系列博客中全程开源并写明,不少同学按照本博客自己编译成功。
  2. 资金紧张但学有余力的同学请自己按照本教程自己动手编译,出现问题请查阅本系列所有博客,不鼓励从任何渠道购买!!!
  3. 为时间紧张的同学提供优惠通道:【(不含core / cuda12.1)selective_scan-0.0.2-cp310-cp310-linux_x86_64.whl】;【(含core / cuda12.1)selective_scan-0.0.2-cp310-cp310-linux_x86_64.whl】;【(含core / cuda11.8)selective_scan-0.0.2-cp310-cp310-linux_x86_64.whl】。或vx私信。
  4. 由于精力有限,只对【付费同学】全程售后,安装包本身没有价值,指导安装挤占了本人大量时间,所以付费其实是咨询费,其他同学随缘。
  5. 使用本人提供的whl请保证python、torch及cuda版本与博客里一致。否则会出现 DLL load failed 问题。有环境版本定制化需求请私信vx。
  6. 网上有大量人抄袭本系列博客的教程,连本人当时随手建的环境都变成了这些教程的基础配置,还是请关注本系列博客的权威解答,除前述渠道外的其他渠道均需理性看待,谨防诈骗。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

FRP内网穿透0.61.1新版教程

在上一篇zerotier讲述了如何实现虚拟局域网搭建&#xff0c;这篇会讲述FRP内网穿透的使用教程 那么frp与zerotier的区别是什么呢&#xff1f;&#xff08;说人话&#xff09; FRP 主要用于内网服务向外网的单向暴露。 ZeroTier 用于构建一个虚拟的私有网络&#xff0c;实现多点…

如何使用MaskerLogger防止敏感数据发生泄露

关于MaskerLogger MaskerLogger是一款功能强大的记录工具&#xff0c;该工具可以有效防止敏感数据泄露的发生。 MaskerLogger旨在保护目标系统的日子安全&#xff0c;此格式化程序可确保你的日志安全并防止敏感数据泄露。例如使用此格式化程序&#xff0c;打印下列数据&#x…

React进阶之react.js、jsx模板语法及babel编译

React React介绍React官网初识React学习MVCMVVM JSX外部的元素props和内部的状态statepropsstate 生命周期constructorgetDerivedStateFromPropsrendercomponentDidMount()shouldComponentUpdategetSnapshotBeforeUpdate(prevProps, prevState) 创建项目CRA&#xff1a;create-…

【Python】JSON

文章目录 定义Json格式数据转化 定义 JSON是一种轻量级的数据交互格式&#xff0c;可以按照JSON指定的格式去组织和封装数据 JSON本质上是一个带有特定格式的字符串 JSON可以直接和Python的字典或列表进行无缝转换 【主要功能】 JSON就是一个在各个编程语言中流通的数据格…

.Net Core微服务入门全纪录(五)——Ocelot-API网关(下)

系列文章目录 1、.Net Core微服务入门系列&#xff08;一&#xff09;——项目搭建 2、.Net Core微服务入门全纪录&#xff08;二&#xff09;——Consul-服务注册与发现&#xff08;上&#xff09; 3、.Net Core微服务入门全纪录&#xff08;三&#xff09;——Consul-服务注…

【18】Word:明华中学-儿童医保❗

目录 题目​ NO2 NO3 NO4 NO5 NO6 NO7 NO8 NO9 题目 NO2 布局→页面设置对话框→纸张方向&#xff1a;横向→纸张大小&#xff1a;A3 &#xff1b;页面设置对话框&#xff1a;直接输入纸张大小的宽度和高度即可→页面设置对话框&#xff1a;上下左右边距→版式&…

数据结构漫游记:动态实现栈(stack)

嘿&#xff0c;各位技术潮人&#xff01;好久不见甚是想念。生活就像一场奇妙冒险&#xff0c;而编程就是那把超酷的万能钥匙。此刻&#xff0c;阳光洒在键盘上&#xff0c;灵感在指尖跳跃&#xff0c;让我们抛开一切束缚&#xff0c;给平淡日子加点料&#xff0c;注入满满的pa…

SpringBoot 搭建 SSE

参考链接 https://www.51cto.com/article/798001.html 了解一下SseEmitter&#xff08;一&#xff09;-CSDN博客 依赖 有默认的 springboot-web 依赖即可 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-start…

python_在钉钉群@人员发送消息

python_在钉钉群人员发送消息 1、第一种 企业内部机器人群聊实现人接入指南&#xff0c;适用于群机器人接收消息&#xff0c;处理完一系列的动作之后&#xff0c;将消息返回给发消息的人员&#xff0c;同时该人员。 需要在企微后台新建一个自建应用&#xff0c;在自建应用里…

macOS安装Gradle环境

文章目录 说明安装JDK安装Gradle 说明 gradle8.5最高支持jdk21&#xff0c;如果使用jdk22建议使用gradle8.8以上版本 安装JDK mac系统安装最新&#xff08;截止2024.9.13&#xff09;Oracle JDK操作记录 安装Gradle 下载Gradle&#xff0c;解压将其存放到资源java/env目录…

HTML之拜年/跨年APP(改进版)

目录&#xff1a; 一&#xff1a;目录 二&#xff1a;效果 三&#xff1a;页面分析/开发逻辑 1.页面详细分析&#xff1a; 2.开发逻辑&#xff1a; 四&#xff1a;完整代码&#xff08;不多废话&#xff09; index.html部分 app.json部分 二&#xff1a;效果 三&#xff1a;页面…

PostgreSQL的学习心得和知识总结(一百六十六)|深入理解PostgreSQL数据库之\watch元命令的实现原理

目录结构 注&#xff1a;提前言明 本文借鉴了以下博主、书籍或网站的内容&#xff0c;其列表如下&#xff1a; 1、参考书籍&#xff1a;《PostgreSQL数据库内核分析》 2、参考书籍&#xff1a;《数据库事务处理的艺术&#xff1a;事务管理与并发控制》 3、PostgreSQL数据库仓库…

使用 Parcel 和 NPM 脚本进行打包

使用 Parcel 和 NPM 脚本进行打包 Parcel Parcel 是一个零配置的网页应用程序打包工具&#xff0c;主要用于快速构建现代 JavaScript 应用。 我们可以使用npm直接安装它 npm install --save-dev parcel //这将把 Parcel 添加到 devDependencies 中&#xff0c;表明它是一个…

项目实战--网页五子棋(游戏大厅)(3)

我们的游戏大厅界面主要需要包含两个功能&#xff0c;一是显示用户信息&#xff0c;二是匹配游戏按钮 1. 页面实现 hall.html <!DOCTYPE html> <html lang"ch"> <head><meta charset"UTF-8"><meta name"viewport"…

网络安全VS数据安全

关于网络安全和数据安全&#xff0c;我们常听到如下两种不同声音&#xff1a; 观点一&#xff1a;网络安全是数据安全的基础&#xff0c;把当年做网络安全的那一套用数据安全再做一遍。 观点二&#xff1a;数据安全如今普遍以为是网络安全的延伸&#xff0c;实际情况是忽略数据…

React 中hooks之useDeferredValue用法总结

目录 概述基本用法与防抖节流的区别使用场景区分过时内容最佳实践 概述 什么是 useDeferredValue? useDeferredValue 是 React 18 引入的新 Hook&#xff0c;用于延迟更新某个不那么重要的部分。它接收一个值并返回该值的新副本&#xff0c;新副本会延迟更新。这种延迟是有…

浅谈 JVM

JVM 内存划分 JVM 内存划分为 四个区域&#xff0c;分别为 程序计数器、元数据区、栈、堆 程序计数器是记录当前指令执行到哪个地址 元数据区存储存储的是当前类加载好的数据&#xff0c;包括常量池和类对象的信息&#xff0c;.java 编译之后产生 .class 文件&#xff0c;运…

HTTP / 2

序言 在之前的文章中我们介绍过了 HTTP/1.1 协议&#xff0c;现在再来认识一下迭代版本 2。了解比起 1.1 版本&#xff0c;后面的版本改进在哪里&#xff0c;特点在哪里&#xff1f;话不多说&#xff0c;开始吧⭐️&#xff01; 一、 HTTP / 1.1 存在的问题 很多时候新的版本的…

使用vscode在本地和远程服务器端运行和调试Python程序的方法总结

1 官网下载 下载网址&#xff1a;https://code.visualstudio.com/Download 如下图所示&#xff0c;可以分别下载Windows,Linux,macOS版本 历史版本下载链接: https://code.visualstudio.com/updates 2 安装Python扩展工具 打开 VS Code&#xff0c;安装 Microsoft 提供的官…

免费为企业IT规划WSUS:Windows Server 更新服务 (WSUS) 之快速入门教程(一)

哈喽大家好&#xff0c;欢迎来到虚拟化时代君&#xff08;XNHCYL&#xff09;&#xff0c;收不到通知请将我点击星标&#xff01;“ 大家好&#xff0c;我是虚拟化时代君&#xff0c;一位潜心于互联网的技术宅男。这里每天为你分享各种你感兴趣的技术、教程、软件、资源、福利…