【DNN】基础环境搭建 - 指南

news/2025/11/9 12:32:54/文章来源:https://www.cnblogs.com/gccbuaa/p/19204068

目录

  • 前言
  • 系统信息
    • 操作系统
    • 显卡驱动
  • CUDA
    • 配置环境变量
    • 验证是否安装成功
    • 11.8.0
    • 12.4.1
    • 12.8.1
  • CUDNN
    • 配置环境变量
    • 验证安装是否成功
    • 8.9.7.29_cuda11
    • 9.2.1.18_cuda12
    • 9.14.0.64_cuda12
  • TensorRT
    • 配置环境变量
    • 验证是否安装成功
    • 8.6.1.6(CUDA 11.x)
    • 10.7.0.23(CUDA 12.0-12.6)
    • 10.8.0.43(CUDA 12.x)
  • 后记

前言

实现CUDACUDNNTensorRT各个版本之间的依赖关系尤为重要,但是在不同的工作环境下可能需要使用不同的版本匹配。本文主要通过软连接的方式实现各个版本之间的自由搭配。

系统信息

操作系统

  • lsb_release
    LSB Version:	core-11.1.0ubuntu4-noarch:security-11.1.0ubuntu4-noarch
    Distributor ID:	Ubuntu
    Description:	Ubuntu 22.04.5 LTS
    Release:	22.04
    Codename:	jammy
  • hostnamectl
    Static hostname: msi
    Icon name: computer-desktop
    Chassis: desktop
    Machine ID: 0905fc3742014849a8f6e66a18eec86a
    Boot ID: 946b89d00b014454b09cbb0f267b287a
    Operating System: Ubuntu 22.04.5 LTS
    Kernel: Linux 6.8.0-85-generic
    Architecture: x86-64
    Hardware Vendor: Micro-Star International Co., Ltd.
    Hardware Model: MS-7D25

显卡驱动

  • 查看系统推荐的显卡驱动(选择带recommended的驱动)
    ubuntu-drivers devices
    == /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0 ==
    modalias : pci:v000010DEd00001E07sv000019DAsd00001503bc03sc00i00
    vendor   : NVIDIA Corporation
    model    : TU102 [GeForce RTX 2080 Ti Rev. A]
    driver   : nvidia-driver-470-server - distro non-free
    driver   : nvidia-driver-550 - distro non-free
    driver   : nvidia-driver-545-open - distro non-free
    driver   : nvidia-driver-545 - distro non-free
    driver   : nvidia-driver-570-open - distro non-free
    driver   : nvidia-driver-550-open - distro non-free
    driver   : nvidia-driver-535-server - distro non-free
    driver   : nvidia-driver-570-server-open - distro non-free
    driver   : nvidia-driver-580-server-open - distro non-free
    driver   : nvidia-driver-570-server - distro non-free
    driver   : nvidia-driver-535-open - distro non-free
    driver   : nvidia-driver-535 - distro non-free
    driver   : nvidia-driver-580 - distro non-free recommended
    driver   : nvidia-driver-470 - distro non-free
    driver   : nvidia-driver-450-server - distro non-free
    driver   : nvidia-driver-580-server - distro non-free
    driver   : nvidia-driver-580-open - distro non-free
    driver   : nvidia-driver-570 - distro non-free
    driver   : nvidia-driver-535-server-open - distro non-free
    driver   : nvidia-driver-418-server - distro non-free
    driver   : xserver-xorg-video-nouveau - distro free builtin
  • 安装驱动
    在这里插入图片描述
  • 显卡信息
    nvidia-smi
    +-----------------------------------------------------------------------------------------+
    | NVIDIA-SMI 580.65.06              Driver Version: 580.65.06      CUDA Version: 13.0     |
    +-----------------------------------------+------------------------+----------------------+
    | GPU  Name                 Persistence-M | Bus-Id          Disp.A | Volatile Uncorr. ECC |
    | Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |
    |                                         |                        |               MIG M. |
    |=========================================+========================+======================|
    |   0  NVIDIA GeForce RTX 2080 Ti     Off |   00000000:01:00.0  On |                  N/A |
    | 44%   51C    P2            127W /  260W |    1118MiB /  11264MiB |     44%      Default |
    |                                         |                        |                  N/A |
    +-----------------------------------------+------------------------+----------------------+
    +-----------------------------------------------------------------------------------------+
    | Processes:                                                                              |
    |  GPU   GI   CI              PID   Type   Process name                        GPU Memory |
    |        ID   ID                                                               Usage      |
    |=========================================================================================|
    |    0   N/A  N/A            1737      G   /usr/lib/xorg/Xorg                      117MiB |
    |    0   N/A  N/A            1899      G   /usr/bin/gnome-shell                    104MiB |
    |    0   N/A  N/A            3911      C   python                                  872MiB |
    +-----------------------------------------------------------------------------------------+

CUDA

https://developer.nvidia.com/cuda-toolkit-archive

配置环境变量

# vim ~/.bashrc
export CUDA_HONE=/usr/local/cuda
export CUDA_INC_DIR=${CUDA_HONE}/include
export CUDA_LIB_DIR=${CUDA_HONE}/lib64
export CUDA_BIN_DIR=${CUDA_HONE}/bin
export CUDA_CUPTI_INC_DIR=${CUDA_HONE}/extras/CUPTI/include
export CUDA_CUPTI_LIB_DIR=${CUDA_HONE}/extras/CUPTI/lib64
export PATH=${CUDA_BIN_DIR}${PATH:+:${PATH}}
export LD_LIBRARY_PATH=${CUDA_LIB_DIR}${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
export LD_LIBRARY_PATH=${CUDA_CUPTI_LIB_DIR}${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

验证是否安装成功

  • nvcc -V

  • /usr/local/cuda-11.8/extras/demo_suite/bandwidthTest

  • /usr/local/cuda-11.8/extras/demo_suite/deviceQuery

  • 编译测试程序

    // test_cuda.cpp
    #include <stdio.h>#include <stdlib.h>#include <cuda_runtime.h>int main() {int deviceCount;cudaGetDeviceCount(&deviceCount);printf("找到 %d 个CUDA设备:\n", deviceCount);for (int i = 0; i < deviceCount; i++) {cudaDeviceProp prop;cudaGetDeviceProperties(&prop, i);printf("设备 %d: %s\n", i, prop.name);printf("  Compute Capability: %d.%d\n", prop.major, prop.minor);printf("  全局内存: %.2f GB\n", prop.totalGlobalMem / (1024.0 * 1024.0 * 1024.0));printf("  CUDA核心: %d\n", prop.multiProcessorCount * prop.maxThreadsPerMultiProcessor);}// 简单的GPU计算测试float *d_array, *h_array;h_array = (float*)malloc(10 * sizeof(float));cudaMalloc(&d_array, 10 * sizeof(float));cudaMemcpy(d_array, h_array, 10 * sizeof(float), cudaMemcpyHostToDevice);cudaMemcpy(h_array, d_array, 10 * sizeof(float), cudaMemcpyDeviceToHost);cudaFree(d_array);free(h_array);printf("CUDA内存操作测试: 成功!\n");return 0;}
    • 编译:
      g++ -o test_cuda test_cuda.cpp -I${CUDA_INC_DIR} -I${CUDA_CUPTI_INC_DIR} -L${CUDA_LIB_DIR} -I${CUDA_CUPTI_LIB_DIR} -lcudart
    • 运行:
      ./test_cuda

11.8.0

在这里插入图片描述

# 下载链接
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 rm -rf /usr/local/cuda
sudo ln -s /usr/local/cuda-11.8 /usr/local/cuda
# 卸载(需重新配置软连接)
sudo rm -rf /usr/local/cuda
sudo ln -s /usr/local/cuda-11.8 /usr/local/cuda
sudo /usr/local/cuda/bin/cuda-uninstaller
sudo rm -rf /usr/local/cuda

12.4.1

在这里插入图片描述

# 下载链接
wget https://developer.download.nvidia.com/compute/cuda/12.4.1/local_installers/cuda_12.4.1_550.54.15_linux.run
# 安装(取消驱动安装)
sudo sh cuda_12.4.1_550.54.15_linux.run
# 配置软链接
sudo rm -rf /usr/local/cuda
sudo ln -s /usr/local/cuda-12.4 /usr/local/cuda
# 卸载(需重新配置软连接)
sudo rm -rf /usr/local/cuda
sudo ln -s /usr/local/cuda-12.4 /usr/local/cuda
sudo /usr/local/cuda/bin/cuda-uninstaller
sudo rm -rf /usr/local/cuda

12.8.1

在这里插入图片描述

# 下载链接
wget https://developer.download.nvidia.com/compute/cuda/12.8.1/local_installers/cuda_12.8.1_570.124.06_linux.run
# 安装(取消驱动安装)
sudo sh cuda_12.8.1_570.124.06_linux.run
# 配置软链接
sudo rm -rf /usr/local/cuda
sudo ln -s /usr/local/cuda-12.8 /usr/local/cuda
# 卸载(需重新配置软连接)
sudo rm -rf /usr/local/cuda
sudo ln -s /usr/local/cuda-12.8 /usr/local/cuda
sudo /usr/local/cuda/bin/cuda-uninstaller
sudo rm -rf /usr/local/cuda

CUDNN

https://developer.download.nvidia.cn/compute/cudnn/redist/cudnn/linux-x86_64/

配置环境变量

# vim ~/.bashrc
export CUDNN_HOME=/opt/cudnn
export CUDNN_INC_DIR=${CUDNN_HOME}/include
export CUDNN_LIB_DIR=${CUDNN_HOME}/lib
export LD_LIBRARY_PATH=${CUDNN_LIB_DIR}${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

验证安装是否成功

  • cat ${CUDNN_INC_DIR}/cudnn_version.h | grep CUDNN_MAJOR -A 2
  • 编译运行测试程序
    // test_cudnn.cpp
    #include <cudnn.h>#include <iostream>#include <cstdlib>int main() {cudnnHandle_t handle;cudnnStatus_t status = cudnnCreate(&handle);if (status != CUDNN_STATUS_SUCCESS) {std::cerr << "cuDNN初始化失败: " << cudnnGetErrorString(status) << std::endl;return EXIT_FAILURE;}std::cout << "✓ cuDNN初始化成功" << std::endl;// 获取版本信息size_t version = cudnnGetVersion();std::cout << "✓ cuDNN版本: " << version << std::endl;cudnnDestroy(handle);std::cout << "✓ cuDNN测试完成: 所有操作成功" << std::endl;return EXIT_SUCCESS;}
    • 编译
      g++ -o test_cudnn test_cudnn.cpp -I${CUDA_INC_DIR} -I${CUDA_CUPTI_INC_DIR} -I${CUDNN_INC_DIR} -L${CUDNN_LIB_DIR} -lcudnn
    • 运行
      ./test_cudnn

8.9.7.29_cuda11

下载
wget https://developer.download.nvidia.cn/compute/cudnn/redist/cudnn/linux-x86_64/cudnn-linux-x86_64-8.9.7.29_cuda11-archive.tar.xz
# 解压
sudo tar -xf cudnn-linux-x86_64-8.9.7.29_cuda11-archive.tar.xz -C /opt
# 配置软链接
sudo rm -rf /opt/cudnn
sudo ln -s /opt/cudnn-linux-x86_64-8.9.7.29_cuda11-archive /opt/cudnn
# 设置文件权限
sudo chmod a+r /opt/cudnn-linux-x86_64-8.9.7.29_cuda11-archive/include/cudnn*
sudo chmod a+r /opt/cudnn-linux-x86_64-8.9.7.29_cuda11-archive/lib/libcudnn*
# 卸载
sudo rm -rf /opt/cudnn-linux-x86_64-8.9.7.29_cuda11-archive
sudo rm -rf /opt/cudnn

9.2.1.18_cuda12

# 下载
wget https://developer.download.nvidia.cn/compute/cudnn/redist/cudnn/linux-x86_64/cudnn-linux-x86_64-9.2.1.18_cuda12-archive.tar.xz
# 解压
sudo tar -xf cudnn-linux-x86_64-9.2.1.18_cuda12-archive.tar.xz -C /opt
# 配置软链接
sudo rm -rf /opt/cudnn
sudo ln -s /opt/cudnn-linux-x86_64-9.2.1.18_cuda12-archive /opt/cudnn
# 设置文件权限
sudo chmod a+r /opt/cudnn-linux-x86_64-9.2.1.18_cuda12-archive/include/cudnn*
sudo chmod a+r /opt/cudnn-linux-x86_64-9.2.1.18_cuda12-archive/lib/libcudnn*
# 卸载
sudo rm -rf /opt/cudnn-linux-x86_64-9.2.1.18_cuda12-archive
sudo rm -rf /opt/cudnn

9.14.0.64_cuda12

# 下载
wget https://developer.download.nvidia.cn/compute/cudnn/redist/cudnn/linux-x86_64/cudnn-linux-x86_64-9.14.0.64_cuda12-archive.tar.xz
# 解压
sudo tar -xf cudnn-linux-x86_64-9.14.0.64_cuda12-archive.tar.xz -C /opt
# 配置软链接
sudo rm -rf /opt/cudnn
sudo ln -s /opt/cudnn-linux-x86_64-9.14.0.64_cuda12-archive /opt/cudnn
# 设置文件权限
sudo chmod a+r /opt/cudnn-linux-x86_64-9.14.0.64_cuda12-archive/include/cudnn*
sudo chmod a+r /opt/cudnn-linux-x86_64-9.14.0.64_cuda12-archive/lib/libcudnn*
# 卸载
sudo rm -rf /opt/cudnn-linux-x86_64-8.9.7.29_cuda11-archive
sudo rm -rf /opt/cudnn

TensorRT

https://developer.nvidia.com/tensorrt/download

配置环境变量

# vim ~/.bashrc
export TENSORRT_HOME=/opt/tensorrt
export TENSORRT_INC_DIR=${TENSORRT_HOME}/include
export TENSORRT_LIB_DIR=${TENSORRT_HOME}/lib
export TENSORRT_BIN_DIR=${TENSORRT_HOME}/bin
export PATH=${TENSORRT_BIN_DIR}${PATH:+:${PATH}}
export LD_LIBRARY_PATH=${TENSORRT_LIB_DIR}${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

验证是否安装成功

  • ls -l ${TENSORRT_LIB_DIR}/libnvinfer.so*
  • trtexec --help
  • trtexec --onnx=${TENSORRT_HOME}/data/mnist/mnist.onnx | grep 'TensorRT version'

8.6.1.6(CUDA 11.x)

在这里插入图片描述

# 下载
wget https://developer.nvidia.com/downloads/compute/machine-learning/tensorrt/secure/8.6.1/tars/TensorRT-8.6.1.6.Linux.x86_64-gnu.cuda-11.8.tar.gz
# 解压
sudo tar -xf TensorRT-8.6.1.6.Linux.x86_64-gnu.cuda-11.8.tar.gz -C /opt
# 改名(便于区分适配不同的CUDA版本)
sudo mv /opt/TensorRT-8.6.1.6 /opt/TensorRT-8.6.1.6-cuda-11.x
# 软链接
sudo rm -rf /opt/tensorrt
sudo ln -s /opt/TensorRT-8.6.1.6-cuda-11.x /opt/tensorrt
# 删除
sudo rm -rf /opt/TensorRT-8.6.1.6-cuda-11.x
sudo rm -rf /opt/tensorrt

10.7.0.23(CUDA 12.0-12.6)

在这里插入图片描述

# 下载
wget https://developer.nvidia.com/downloads/compute/machine-learning/tensorrt/10.7.0/tars/TensorRT-10.7.0.23.Linux.x86_64-gnu.cuda-12.6.tar.gz
# 解压
sudo tar -xf TensorRT-10.7.0.23.Linux.x86_64-gnu.cuda-12.6.tar.gz -C /opt
# 改名(便于区分适配不同的CUDA版本)
sudo mv /opt/TensorRT-10.7.0.23 /opt/TensorRT-10.7.0.23-cuda-12.0-12.6
# 软链接
sudo rm -rf /opt/tensorrt
sudo ln -s /opt/TensorRT-10.7.0.23-cuda-12.0-12.6 /opt/tensorrt
# 删除
sudo rm -rf /opt/TensorRT-10.7.0.23-cuda-12.0-12.6
sudo rm -rf /opt/tensorrt

10.8.0.43(CUDA 12.x)

在这里插入图片描述

# 下载
wget https://developer.nvidia.com/downloads/compute/machine-learning/tensorrt/10.8.0/tars/TensorRT-10.8.0.43.Linux.x86_64-gnu.cuda-12.8.tar.gz
# 解压
sudo tar -xf TensorRT-10.8.0.43.Linux.x86_64-gnu.cuda-12.8.tar.gz -C /opt
# 改名(便于区分适配不同的CUDA版本)
sudo mv /opt/TensorRT-10.8.0.43 /opt/TensorRT-10.8.0.43-cuda-12.x
# 软链接
sudo rm -rf /opt/tensorrt
sudo ln -s /opt/TensorRT-10.8.0.43-cuda-12.x /opt/tensorrt
# 删除
sudo rm -rf /opt/TensorRT-10.8.0.43-cuda-12.x
sudo rm -rf /opt/tensorrt

后记

可根据不同的需求调整版本适配,例如:

  • 基于CUDA(11.8)训练与部署CNN网络
    # CUDA
    sudo rm -rf /usr/local/cuda
    sudo ln -s /usr/local/cuda-11.8 /usr/local/cuda
    # CUDNN
    sudo rm -rf /opt/cudnn
    sudo ln -s /opt/cudnn-linux-x86_64-8.9.7.29_cuda11-archive /opt/cud
    # TensorRT
    sudo rm -rf /opt/tensorrt
    sudo ln -s /opt/TensorRT-8.6.1.6-cuda-11.x /opt/tensorrt
  • 基于CUDA(12.8)训练与部署千问大模型
    # CUDA
    sudo rm -rf /usr/local/cuda
    sudo ln -s /usr/local/cuda-12.8 /usr/local/cuda
    # CUDNN
    sudo rm -rf /opt/cudnn
    sudo ln -s /opt/cudnn-linux-x86_64-9.14.0.64_cuda12-archive /opt/cudnn
    # TensorRT
    sudo rm -rf /opt/tensorrt
    sudo ln -s /opt/TensorRT-10.8.0.43-cuda-12.x /opt/tensorrt

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

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

相关文章

解码lvgl图片

图像控件(lv_img):操作 RGB 像素数据 LVGL 不直接支持 PNG/JPG,需通过 “C 数组编译” 或 “第三方库解析” 实现,核心是绑定 RGB 像素数据。 场景 1:有限图像(固定图标 / 按钮,数量少) 适用于 APP 图标、功能…

对着星光和海,忘掉一切恨事。我小于一粒微尘,却长于永恒。 ---郑愁予- 每一个不曾起舞的日子,都是对生命的辜负。 ---尼采- 真实地活下去,还有,不要忘记看每天的月亮。 ---坂本龙一- 长大后,你会发现所谓的岁月静…

从功能测试到自动化测试开发:软件测试工程师技能提升指南

覆盖Postman接口测试、Selenium自动化、JMeter性能测试等主流技术栈,从用例设计到CI/CD全流程实战。告别重复劳动,掌握自动化测试核心技能。包含Web/接口/APP测试全场景,配合Git和Linux实操,快速提升竞争力。软件测…

2025年质量好的进口品牌平面铰链行业内知名厂家排行榜

2025年质量好的进口品牌平面铰链行业内知名厂家排行榜行业背景与市场趋势随着全球家居建材行业的持续发展,平面铰链作为五金配件中的关键部件,其市场需求呈现稳定增长态势。据最新行业报告显示,2024年全球高端铰链市…

2025年质量好的冷凝式衣物烘干机TOP实力厂家推荐榜

2025年质量好的冷凝式衣物烘干机TOP实力厂家推荐榜行业背景与市场趋势随着中国家庭生活水平的不断提高和消费升级趋势的持续深化,衣物烘干机作为改善生活品质的重要家电产品,正迎来快速增长期。根据中国家用电器研究…

2025年比较好的包边净化铝型材高评价厂家推荐榜

2025年比较好的包边净化铝型材高评价厂家推荐榜行业背景与市场趋势随着我国建筑、交通、电子等行业的快速发展,铝型材作为重要的工业原材料,市场需求持续增长。据中国有色金属工业协会统计,2024年我国铝型材市场规模…

JSON 学习笔记

JSON 学习笔记JSON 的学习笔记 JSON 是 JavaScript Object Notation 这个专有名词的缩写形式,从字面上理解,这就是一种 JavaScript 对象的表示方法。由于这种表示方法在描述结构化数据时使用的是 JavaScript 中的一些…

2025年热门的衣柜抽屉滑轨厂家实力及用户口碑排行榜

2025年热门的衣柜抽屉滑轨厂家实力及用户口碑排行榜行业背景与市场趋势随着中国家居五金行业的快速发展,衣柜抽屉滑轨作为功能性五金的核心部件,其市场需求持续增长。据中国五金制品协会最新数据显示,2024年中国家居…

2025年口碑好的直角中空旋转平台TOP实力厂家推荐榜

2025年口碑好的直角中空旋转平台TOP实力厂家推荐榜 行业背景与市场趋势 随着工业自动化水平的不断提升,直角中空旋转平台作为高精度传动设备的核心部件,在机器人、数控机床、半导体设备、医疗设备等领域的需求持续…

深入解析:场景美术师的“无限画板”:UE5中非破坏性的材质混合(Material Blending)工作流

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025年热门的广播音响厂家最新权威推荐排行榜

2025年热门的广播音响厂家最新权威推荐排行榜行业背景与市场趋势随着数字技术的快速发展和智能化需求的不断提升,全球广播音响市场正经历着前所未有的变革。根据国际音频工程协会(AES)最新发布的《2024-2025全球专业…

使用AdGuard屏蔽52破解置顶帖

52破解的置顶帖太占用空间了还不能折叠,使用AdGuard的用户过滤器隐藏置顶 # 隐藏置顶帖子 52pojie.cn##tbody[id^="stickthread_"] # 隐藏版块版规 52pojie.cn##div.bm_c.cl.pbn

2025年知名的反弹缓冲滑轨行业内知名厂家排行榜

2025年知名的反弹缓冲滑轨行业内知名厂家排行榜 行业背景与市场趋势 反弹缓冲滑轨作为现代家居五金和工业设备的重要组成部分,广泛应用于橱柜、抽屉、医疗器械、办公家具等领域。随着消费者对家居品质和功能性的要求…

网络攻防实战 lab05 靶机 VulnHub IndiShell Lab: Billu_b0x

地址发现 端口发现 端口服务与版本探测

20251109 之所思 - 人生如梦

20251109 之所思昨天因为一个项目11月19日需要释放一个重要的版本给客户,但是还有几个系统局限性的问题要处理,然后某人开始把所有人拉上会,一开就是三个小时,然后在会上自己就不停的抱怨项目失控,没人真正的想办…

GitHub 快速入门指南,新手必备的高效使用手册!

前言 GitHub 作为全球最大的代码托管平台,汇聚了无数开发者的智慧与开源项目,已成为推动技术进步的重要引擎。掌握 GitHub 的常用技巧,不仅能显著提升开发效率,还能帮助我们快速定位问题、复用优质代码。 GitHub官…

2025年靠谱的工地铺路钢板租赁行业内口碑厂家排行榜

2025年靠谱的工地铺路钢板租赁行业内口碑厂家排行榜行业背景与市场趋势随着我国基础设施建设的持续投入和城市化进程的加快,工地铺路钢板租赁行业迎来了快速发展期。据中国工程机械工业协会最新数据显示,2024年我国铺…

MySQL索引(四):深入剖析索引失效的原因与优化方案

本文将深入分析索引失效的多种场景及其背后的原理,帮助你全面理解索引为何有时会“失效”,以及如何有效避免和优化这类问题。MySQL系列文章 本文是 MySQL索引系列的第四篇。在前三篇文章中,我们系统介绍了索引的数据…

实用指南:Node.js模块化开发实训案例

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

PHPinclude-labs-level 0-11 WP

PHPinclude-labs-level 0-11 WP PHPinclude-labs-level 0 WP isset($_GET[wrappers]) ? include($_GET[wrappers]) : ; highlight_file(__FILE__);通过 GET wrappers 来使得 include 把文件包含,这里的包含是指将文件…