mmdeploy源码安装 (转换faster rcnn r50/yolox为tensorrt,并进行推理)

这个系列是一个随笔,是我走过的一些路,有些地方可能不太完善。如果有那个地方没看懂,评论区问就可以,我给补充。

目录:

0️⃣ mmdeploy源码安装 (转换faster rcnn r50/yolox为tensorrt,并进行推理)_gy77

内容:一文包含了在Linux系统下安装mmdeploy模型转换环境,模型转换为TensorRT,在Linux,Windows下模型推理,推理结果展示。

MMDeploy部署实战系列

1️⃣ MMDeploy部署实战系列【第一章】:Docker,Nvidia-docker安装_gy77

内容:docker/nvidia-docker安装,docker/nvidia-docker国内源,docker/nvidia-docker常用命令。

2️⃣ MMDeploy部署实战系列【第二章】:mmdeploy安装及环境搭建_gy77

内容:mmdeploy环境安装三种方法:源码安装,官方docker安装,自定义Dockerfile安装。

3️⃣ MMDeploy部署实战系列【第三章】:MMdeploy pytorch模型转换onnx,tensorrt_gy77

内容:如何查找pytorch模型对应的部署配置文件,模型转换示例:mmcls:resnext50,mmdet:yolox-s,faster rcnn50。

4️⃣ MMDeploy部署实战系列【第四章】:onnx,tensorrt模型推理_gy77

内容:在linux,windows环境下推理,Windows下推理环境安装,推理速度对比,显存对比,可视化展示。

5️⃣ MMDeploy部署实战系列【第五章】:Windows下Release x64编译mmdeploy c++SDK,对TensorRT模型进行推理_gy77

内容:Windows下环境安装SDK编译环境,编译c++ mmdeploy SDK,编译c++ mmdeploy demo SDK,运行实例。

配置环境变量 约定:

$env:TENSORRT_DIR = "F:\env\TensorRT"
# Windows: 上边命令代表新建一个系统变量,变量名为:TENSORRT_DIR 变量值为:F:\env\TensorRT
# Linux:
vim ~/.bashrc
#在最后一行加入
export TENSORRT_DIR=/home/gy77/TensorRT
source ~/.bashrc $env:Path = "F:\env\TensorRT\lib"
# Windows: 上边命令代表在系统变量Path下,新加一个值为:F:\env\TensorRT\lib
# Linux:
vim ~/.bashrc
#在最后一行加入, :$PATH代表在原先PATH环境变量基础上添加/home/gy77/TensorRT/lib
export PATH=/home/gy77/TensorRT/lib:$PATH
source ~/.bashrc

下面是正文:


参考官方文档: 操作概述 — mmdeploy 0.6.0 文档

本文的主要内容都来自官方文档,只不过是把版本细化了,

GPU: RTX 2060
Driver:455.23.05
Ubantu:18.04
Cuda:11.1
Cudnn:8.2.1(系统的cuda环境下是8.2.1,mmdeploy虚拟环境下是8.0.0.5)
Python:3.7
Pytorch:1.8.0
torchvision:0.9.0
mmdeploy:0.5.0
Tensorrt:8.2.3.0

我的所有的dir

MMDET_DIR : /home/xbsj/gaoying/mmdetection
MMDEPLOY_DIR: /home/xbsj/gaoying/mmdeploy
WORK_DIR : /home/xbsj/gaoying/mmdeploymmdeploy_models/faster_rcnn

准备工作

对于端到端的模型转换和推理,MMDeploy 依赖 Python 3.6+ 以及 PyTorch 1.5+。

1️⃣ 创建并激活 conda 环境
conda create -n mmdeploy python=3.7 -y
conda activate mmdeploy
2️⃣ 安装 PyTorch

Model Converter 的 torch2onnx 功能依赖它。在 GPU 环境下(这里我们以 Ubuntu 18.04 CUDA 11.1 为基础),您可以使用如下方式安装 PyTorch 1.8:

conda install pytorch==1.8.0 torchvision==0.9.0 cudatoolkit=11.1 -c pytorch -c conda-forge
3️⃣ 安装cuda和cudnn

安装cuda 11.1:CUDA Toolkit 11.1 Update 1 Downloads | NVIDIA Developer

安装过程中几个注意的点:第一个页面选continue,第二个页面输入accept,第三个页面在驱动那个选项按空格把x去掉,也就是不安装驱动。然后install。第四个页面选择install。

wget https://developer.download.nvidia.com/compute/cuda/11.1.1/local_installers/cuda_11.1.1_455.32.00_linux.run
sudo sh cuda_11.1.1_455.32.00_linux.run

安装cudnn8.2.1:Download cuDNN v8.2.1 (June 7th, 2021), for CUDA 11.x

https://developer.nvidia.com/compute/machine-learning/cudnn/secure/8.2.1.32/11.3_06072021/cudnn-11.3-linux-x64-v8.2.1.32.tgz 在网址选择版本 后下载,上传到服务器,并解压。然后复制到cuda目录下

tar -zxvf cudnn-11.3-linux-x64-v8.2.1.32.tgz

# 复制cudnn头文件
sudo cp cuda/include/* /usr/local/cuda/include/
# 复制cudnn的库
sudo cp cuda/lib64/* /usr/local/cuda/lib64/
# 添加可执行权限
sudo chmod +x /usr/local/cuda/include/cudnn.h
sudo chmod +x /usr/local/cuda/lib64/libcudnn* # 检查cudnn版本
cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2
4️⃣ 安装 mmcv-full
python -m pip install mmcv-full==1.5.0 -f https://download.openmmlab.com/mmcv/dist/cu111/torch1.8.0/index.html
5️⃣ 安装 MMDeploy 和 SDK

从 v0.5.0 之后,MMDeploy 开始提供预编译包。您可以根据目标软硬件平台,从这里选择并下载预编译包。在 NVIDIA 设备上,我们推荐使用 MMDeploy-TensoRT 预编译包:

wget https://github.com/open-mmlab/mmdeploy/releases/download/v0.5.0/mmdeploy-0.5.0-linux-x86_64-cuda11.1-tensorrt8.2.3.0.tar.gz

tar -zxvf mmdeploy-0.5.0-linux-x86_64-cuda11.1-tensorrt8.2.3.0.tar.gz

cd mmdeploy-0.5.0-linux-x86_64-cuda11.1-tensorrt8.2.3.0

python -m pip install dist/mmdeploy-0.5.0-py37-none-linux_x86_64.whl
python -m pip install sdk/python/mmdeploy_python-0.5.0-cp37-none-linux_x86_64.whl export LD_LIBRARY_PATH=/home/xbsj/gaoying/lib/mmdeploy-0.5.0-linux-x86_64-cuda11.1-tensorrt8.2.3.0/sdk/lib:$LD_LIBRARY_PATH # 改为自己的目录 cd ..
6️⃣ 安装预编译包要求的推理后端 TensorRT

在本例中,我们需要安装 TensorRT(含 cuDNN)推理引擎。因在 NVIDIA 官网下载软件包,必须要登录认证,所以请预先登录并下载所需的 TensorRTcuDNN请注意: TensorRT 版本、cuDNN 版本要和 CUDA 版本匹配

下载完毕后,您可以参考如下方法安装。这里,我们以 TensorRT 8.2.3.0、cuDNN 8.2 为例:

# !!! 从 NVIDIA 官网下载 与 cuda toolkit 匹配的 tensorrt 到当前的工作目录
tar -zxvf TensorRT-8.2.3.0.Linux.x86_64-gnu.cuda-11.4.cudnn8.2.tar.gz python -m pip install TensorRT-8.2.3.0/python/tensorrt-8.2.3.0-cp37-none-linux_x86_64.whl
python -m pip install pycuda # vim ~/.bashrc 配置环境变量,添加下面两行,根据自己的目录修改,最后source ~/.bashrc 使生效。
export TENSORRT_DIR=/home/xbsj/gaoying/lib/TensorRT-8.2.3.0
export LD_LIBRARY_PATH=${TENSORRT_DIR}/lib:$LD_LIBRARY_PATH # !!! 从 NVIDIA 官网下载与 cuda toolkit,tensorrt 匹配的 cudnn 到当前的工作目录
tar -zxvf cudnn-11.3-linux-x64-v8.2.1.32.tgz
mv cuda cudnn821_cuda111 # vim ~/.bashrc 配置环境变量,添加下面两行,根据自己的目录修改,最后source ~/.bashrc 使生效。
export CUDNN_DIR=/home/xbsj/gaoying/lib/cudnn821_cuda111
export LD_LIBRARY_PATH=$CUDNN_DIR/lib64:$LD_LIBRARY_PATH

模型转换

Faster RCNN

在准备工作就绪后,我们可以使用 MMDeploy 中的工具 deploy.py,将 OpenMMLab 的 PyTorch 模型转换成推理后端支持的格式。

MMDetection 中的 Faster R-CNN 为例,我们可以使用如下命令,将 PyTorch 模型转换成可部署在 NVIDIA GPU 上的 TenorRT 模型:

# 克隆 mmdeploy 仓库。转换时,需要使用 mmdeploy 仓库中的配置文件,建立转换流水线
git clone --recursive https://github.com/open-mmlab/mmdeploy.git
python -m pip install -r mmdeploy/requirements/runtime.txt # 克隆 mmdetection 仓库。转换时,需要使用 mmdetection 仓库中的模型配置文件,构建 PyTorch nn module
python -m pip install mmdet==2.24.0
git clone https://github.com/open-mmlab/mmdetection.git # 下载 Faster R-CNN 模型权重
cd ./mmdetection/checkpoints
wget https://download.openmmlab.com/mmdetection/v2.0/faster_rcnn/faster_rcnn_r50_fpn_1x_coco/faster_rcnn_r50_fpn_1x_coco_20200130-047c8118.pth -O faster_rcnn_r50_fpn_1x_coco.pth # 设置工作路径
cd ../../mmdeploy
mkdir mmdeploy_models
mkdir mmdeploy_models/faster_rcnn # 执行转换命令,实现端到端的转换[[模板]]
python ${MMDEPLOY_DIR}/tools/deploy.py \
${MMDEPLOY_DIR}/configs/mmdet/detection/detection_tensorrt_dynamic-320x320-1344x1344.py \
${MMDET_DIR}/configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py \
${CHECKPOINT_DIR}/faster_rcnn_r50_fpn_1x_coco_20200130-047c8118.pth \
${MMDET_DIR}/demo/demo.jpg \
--work-dir ${WORK_DIR} \
--device cuda:0 \
--dump-info # 执行转换命令,实现端到端的转换
python tools/deploy.py configs/mmdet/detection/detection_tensorrt_dynamic-320x320-1344x1344.py ../mmdetection/configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py ../mmdetection/checkpoints/faster_rcnn_r50_fpn_1x_coco.pth ../mmdetection/demo/demo.jpg --work-dir mmdeploy_models/faster_rcnn/ --device cuda:0 --dump-info

${MMDEPLOY_DIR}/tools/deploy.py 是一个方便模型转换的工具。您可以阅读 如何转换模型 了解更多细节。

detection_tensorrt_dynamic-320x320-1344x1344.py 是一个参数配置文件。该文件的命名遵循如下规则:

<任务名>_<推理后端>-[后端特性]_<动态模型支持>.py

可以很容易的通过文件名来确定最适合的那个配置文件。如果您希望定制自己的转换配置,可以参考如何编写配置文件修改参数。

yolox

# 下载 YOLOX 模型权重
cd ./mmdetection/checkpoints
wget https://download.openmmlab.com/mmdetection/v2.0/yolox/yolox_s_8x8_300e_coco/yolox_s_8x8_300e_coco_20211121_095711-4592a793.pth -O /yolox_s_8x8_300e_coco.pth # 执行转换命令,实现端到端的转换
python tools/deploy.py configs/mmdet/detection/detection_tensorrt_dynamic-320x320-1344x1344.py ../mmdetection/configs/yolox/yolox_s_8x8_300e_coco.py ../mmdetection/checkpoints/yolox_s_8x8_300e_coco.pth ../mmdetection/demo/demo.jpg --work-dir mmdeploy_models/yolox_s --device cuda:0 --dump-info

模型推理【linux】

在转换完成后,您既可以使用 Model Converter 进行推理,也可以使用 Inference SDK。前者使用 Python 开发,后者主要使用 C/C++ 开发。

使用 Model Converter 的推理 API

Model Converter 屏蔽了推理后端接口的差异,对其推理 API 进行了统一封装,接口名称为 inference_model

以上文中 Faster R-CNN 的 TensorRT 模型为例,您可以使用如下方式进行模型推理工作:

创建 inference_api.py 文件,目录结构如下

├── inference_api.py
├── inference_sdk.py
├── mmdetection/
└── mmdeploy/

inference_api.py

from mmdeploy.apis import inference_model
import os def inf_faster_rcnn_r50():
model_cfg = './mmdetection/configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py'
deploy_cfg = './mmdeploy/configs/mmdet/detection/detection_tensorrt_dynamic-320x320-1344x1344.py'
backend_files = ['./mmdeploy/mmdeploy_models/faster_rcnn/end2end.engine']
img = './mmdetection/demo/demo.jpg'
device = 'cuda:0'
result = inference_model(model_cfg, deploy_cfg, backend_files, img=img, device=device)
print(result) def inf_yolox():
model_cfg = './mmdetection/configs/yolox/yolox_s_8x8_300e_coco.py'
deploy_cfg = './mmdeploy/configs/mmdet/detection/detection_tensorrt_dynamic-320x320-1344x1344.py'
backend_files = ['./mmdeploy/mmdeploy_models/yolox_s/end2end.engine']
img = './mmdetection/demo/demo.jpg'
device = 'cuda:0'
result = inference_model(model_cfg, deploy_cfg, backend_files, img=img, device=device)
print(result) if __name__ == '__main__':
# inf_faster_rcnn_r50()
inf_yolox()

inference_model会创建一个对后端模型的封装,通过该封装进行推理。推理的结果会保持与 OpenMMLab 中原模型同样的格式。

MMDeploy 转出的后端模型,您可以直接使用后端 API 进行推理。不过,因为 MMDeploy 拥有 TensorRT、ONNX Runtime 等自定义算子, 您需要先加载对应的自定义算子库,然后再使用后端 API。

使用推理 SDK

您也可以使用 MMDeploy SDK 进行推理。以上文中转出的 Faster R-CNN TensorRT 模型为例,接下来的章节将介绍如何使用 SDK 的 FFI 进行模型推理。

Python

inference_sdk.py

from mmdeploy_python import Detector
import os
import cv2
import time coco_category = ['person', 'bicycle', 'car', 'motorcycle', 'airplane', 'bus',
'train', 'truck', 'boat', 'traffic light', 'fire hydrant',
'stop sign', 'parking meter', 'bench', 'bird', 'cat', 'dog',
'horse', 'sheep', 'cow', 'elephant', 'bear', 'zebra', 'giraffe',
'backpack', 'umbrella', 'handbag', 'tie', 'suitcase', 'frisbee',
'skis', 'snowboard', 'sports ball', 'kite', 'baseball bat',
'baseball glove', 'skateboard', 'surfboard', 'tennis racket',
'bottle', 'wine glass', 'cup', 'fork', 'knife', 'spoon', 'bowl',
'banana', 'apple', 'sandwich', 'orange', 'broccoli', 'carrot',
'hot dog', 'pizza', 'donut', 'cake', 'chair', 'couch',
'potted plant', 'bed', 'dining table', 'toilet', 'tv', 'laptop',
'mouse', 'remote', 'keyboard', 'cell phone', 'microwave',
'oven', 'toaster', 'sink', 'refrigerator', 'book', 'clock',
'vase', 'scissors', 'teddy bear', 'hair drier', 'toothbrush'] def inf_model_api(model_path, image_path):
detector = Detector(model_path, 'cuda', 0)
img = cv2.imread(image_path)
model_name = os.path.basename(model_path)
t = time.time()
bboxes, labels, _ = detector([img])[0]
print(f"{model_name} cost time:", time.time() - t)
print(f"{model_name} fps:", 1 / (time.time() - t)) indices = [i for i in range(len(bboxes))]
for index, bbox, label_id in zip(indices, bboxes, labels):
[left, top, right, bottom], score = bbox[0:4].astype(int), bbox[4]
if score < 0.3:
continue
cv2.rectangle(img, (left, top), (right, bottom), (0, 255, 0), 2)
cv2.putText(img, coco_category[label_id], (left, top), cv2.FONT_HERSHEY_SIMPLEX, 1.3, (0, 0, 255), 3)
model_name = os.path.basename(model_path)
cv2.imwrite(f'demo_res_trt_{model_name}.png', img)
return bboxes, labels def inf_faster_rcnn_r50():
model_path = '/home/xbsj/gaoying/mmdeploy/mmdeploy_models/faster_rcnn'
image_path = '/home/xbsj/gaoying/demo.png'
res = inf_model_api(model_path, image_path)
# print(res) def inf_yolox_s():
model_path = '/home/xbsj/gaoying/mmdeploy/mmdeploy_models/yolox_s'
image_path = '/home/xbsj/gaoying/demo.png'
res = inf_model_api(model_path, image_path)
# print(res) if __name__ == '__main__':
inf_faster_rcnn_r50()
inf_yolox_s() # yolox_s cost time: 0.014147043228149414
# yolox_s fps: 70.58859960618658
# faster_rcnn cost time: 0.07103466987609863
# faster_rcnn fps: 14.072153983969509

更多模型的 SDK Python应用样例,请查阅这里

️ 注解

如果您使用源码安装方式, 请把 ${MMDEPLOY_DIR}/build/lib 加入到环境变量 PYTHONPATH 中。 否则会遇到错误’ModuleNotFoundError: No module named ‘mmdeploy_python’

C API(略)

参考官方文档:操作概述 — mmdeploy 0.6.0 文档

模型推理【windows】

先安装一下windows下的环境,包括

GPU: RTX 2060
Win:10
Cuda driver:
Cuda:11.1
Cudnn:8.2.1
Python:3.7
Pytorch:1.8.0
torchvision:0.9.0
mmdeploy:0.5.0
Tensorrt:8.2.3.0

安装环境

1️⃣ 安装cuda

参考网址:win10+Anaconda+pytorch+CUDA11.1 详细安装指南

cuda11.1下载地址: CUDA Toolkit 11.1.0 | NVIDIA Developer

下载后打开安装,安装的几个步骤截图: 后边没截图的全选下一步就可以了。

测试是否安装成功:命令行输入nvcc -V,成功结果如下:

nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2020 NVIDIA Corporation
Built on Tue_Sep_15_19:12:04_Pacific_Daylight_Time_2020
Cuda compilation tools, release 11.1, V11.1.74
Build cuda_11.1.relgpu_drvr455TC455_06.29069683_0
2️⃣ 安装cudnn

cudnn下载地址:cuDNN Archive | NVIDIA Developer

下载直连: https://developer.nvidia.com/compute/machine-learning/cudnn/secure/8.0.4/11.1_20200923/cudnn-11.1-windows-x64-v8.0.4.30.zip

覆盖cuda目录:

配置系统环境变量:

5个系统变量:

$env:CUDA_SDK_PATH = "C:\ProgramData\NVIDIA Corporation\CUDA Samples\v11.1"
$env:CUDA_LIB_PATH = "%CUDA_PATH%\lib\x64"
$env:CUDA_BIN_PATH = "%CUDA_PATH%\bin"
$env:CUDA_SDK_BIN_PATH = "%CUDA_SDK_PATH%\bin\win64"
$env:CUDA_SDK_LIB_PATH = "%CUDA_SDK_PATH%\common\lib\x64"

4个Path系统变量:

$env:Path = "C:\ProgramData\NVIDIA Corporation\CUDA Samples\v11.1\common\lib\x64"
$env:Path = "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.1\lib\x64"
$env:Path = "C:\ProgramData\NVIDIA Corporation\CUDA Samples\v11.1\bin\win64"
$env:Path = "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.1\bin"
3️⃣ 安装anaconda

官网下载:Anaconda | The World's Most Popular Data Science Platform

自行安装,记得勾选配置环境变量。

创建conda虚拟环境,进入虚拟环境

conda create -n mmdeploy python=3.7
conda activate mmdeploy

安装pytorch

pip install torch==1.8.0+cu111 torchvision==0.9.0+cu111 torchaudio==0.8.0 -f https://download.pytorch.org/whl/torch_stable.html
4️⃣ 安装 mmcv-full
pip install mmcv-full==1.5.0 -f https://download.openmmlab.com/mmcv/dist/cu111/torch1.8.0/index.html
5️⃣ 安装 MMDeploy 和 SDK

从 v0.5.0 之后,MMDeploy 开始提供预编译包。您可以根据目标软硬件平台,从这里选择并下载预编译包。在 NVIDIA 设备上,我们推荐使用 MMDeploy-TensoRT 预编译包:

下载 mmdeploy-0.5.0-windows-amd64-cuda11.1-tensorrt8.2.3.0

解压,用命令行进入到解压目录下:

pip install dist\mmdeploy-0.5.0-py37-none-win_amd64.whl
pip install sdk\python\mmdeploy_python-0.5.0-cp37-none-win_amd64.whl export LD_LIBRARY_PATH=/home/xbsj/gaoying/lib/mmdeploy-0.5.0-linux-x86_64-cuda11.1-tensorrt8.2.3.0/sdk/lib:$LD_LIBRARY_PATH # 改为自己的目录 cd ..
6️⃣ 安装mmdetction
pip install mmdet
7️⃣ 安装TensorRT

下载地址: NVIDIA TensorRT 8.x Download | NVIDIA Developer

参考网址:windows安装tensorrt - 知乎 (zhihu.com)

下载这个版本:TensorRT-8.2.3.0.Windows10.x86_64.cuda-11.4.cudnn8.2

下载完成后,解压

将 TensorRT-8.2.3.0\include 中所有文件 copy 到 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.1\include

将 TensorRT-8.2.3.0\lib 中所有.lib文件 copy 到 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.1\lib\x64

将 TensorRT-8.2.3.0\lib 中所有.dll文件 copy 到 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.1\bin

进入conda虚拟环境,进入到 TensorRT-8.2.3.0\python\ 目录下:安装tensorrt包

pip install tensorrt-8.2.3.0-cp37-none-win_amd64.whl

使用 Model Converter 的推理 API(略)

参考模型推理Linux

使用推理 SDK(略)

参考模型推理Linux

使用mmdeploy sdk推理结果展示:

速度对比

设备:GTX 2060 fp16 image size:1382x1005(image size=640x427 速度差不多):

GPU占用: 2181M
faster_rcnn infer 1000 iter cost time: 71.89654660224915
faster_rcnn infer 1000 iter fps: 13.908873892542662
GPU占用: 1703M
yolox_s infer 1000 iter cost time: 14.963984966278076
yolox_s infer 1000 iter fps: 66.82266306865823

可视化展示:

原图 faster rcnn r50 yolox s

mmdeploy源码安装 (转换faster rcnn r50/yolox为tensorrt,并用mmdeploy sdk推理)的更多相关文章

  1. 实战 | 源码入门之Faster RCNN

    前言 学习深度学习和计算机视觉,特别是目标检测方向的学习者,一定听说过Faster Rcnn:在目标检测领域,Faster Rcnn表现出了极强的生命力,被大量的学习者学习,研究和工程应用.网上有很多 ...

  2. mysql 在cento下源码安装

    虚拟机改为网络地址转换 (NAT) service network restartping www.baidu.com rpm -qa | grep mysql 有的话通过下面的命令来卸载掉 rpm ...

  3. 烂泥:php5.6源码安装与apache集成

    本文由秀依林枫提供友情赞助,首发于烂泥行天下. apache对php的支持是通过apache的mod_php5模块来支持的,这点与nginx不同.nginx是通过第三方的fastcgi处理器才可以对p ...

  4. glib源码安装使用方法

    glib库是GTK+和GNOME工程的基础底层核心程序库,是一个综合用途的实用的轻量级的C程序库,它提供C语言的常用的数据结构的定义.相关的处理函数,有趣而实用的宏,可移植的封装和一些运行时机能,如事 ...

  5. LNAMP服务器环境(源码安装)

    在安装前先看下它们安装时所需要的依赖库:http://www.cnblogs.com/fps2tao/p/7699448.html 1.nginx源码安装 下载:http://nginx.org/en ...

  6. Linux 源码安装 FFmpeg

    加班次数频繁,已经快一年没有写博了.由于此次在项目中使用到了 FFmpeg 来处理音视频,顾记录下在 Linux 系统中源码安装 FFmpeg 以便不时之需. 1. 安装 yasm yasm 是一个汇 ...

  7. lnmp之阿里云源码安装mysql5.7.17

    mysql5.7.17一直号称世界上最好的mysql 那么就在阿里云主机linux安装它(采用的源码安装mysql5.7.17) 我在阿里云主机上安装它 连接阿里云主机 进入,跟我们自己装的虚拟机一毛 ...

  8. CentOS7下源码安装5.6.23

    清理CentOS7下的MariaDB. [root@localhost ~]#rpm -qa | gremp mariadb     [root@localhost ~]# rpm -e --node ...

  9. CENTOS6.5源码安装LNMP

    CENTOS6.5源码安装LNMP 一.安装前准备 ########################################################################## ...

  10. mysql基础-新版5.7.10源码安装-记录(一)

    0x01 MySQL 从 5.5 版本开始,通过 ./configure 进行编译配置方式已经被取消,取而代之的是 cmake 工具 引用一句话 cmake的重要特性之一是其独立于源码(out-of- ...

随机推荐

  1. Hello 2024C. Grouping Increases(贪心)

    我们只需要记录每个数结尾的数是多少(有点最长上升子序列的味道) 这种子序列的题目很多都是这样的,因为不需要连续很多时候我们只记录最后一个元素是多少. \(记s为较大子序列结尾当前的数,t为较小子序列结 ...

  2. [学习笔记]Linux + Nginx环境下部署 Web 站点

    ​部署后端程序,请阅读: [学习笔记]Linux环境下部署 .Net5 程序 - 林晓lx - 博客园 (cnblogs.com) 打包项目 以Vue项目为例,首先打包站点,前往项目的根目录并键入: ...

  3. Java中枚举配合switch语句用法-2022新项目

    一.业务场景 项目开发中经常会遇到多条件判断的情况,如果判断条件少的话使用if/elseif/else还比较好处理,如果判断条件多的话,则在使用这种语句就不太合适. 如果是自定义的一些内容,比如不同的 ...

  4. idea editor tabs 标题头 多行显示,全部显示出来 (vscode也放一个)

  5. think about 和 think of 区别

    about 是 on by out 简称 about 在旁边 在外围 周边 think about you 想你有关的事 of 是 belong to 什么什么的 of指的是 这个人或者这个事本身相关 ...

  6. Cesium之CustomShader

    1. 引言 Cesium自1.87.1版本,开始支持3DTileset使用CustomShader: Added CustomShader class for styling Cesium3DTile ...

  7. Spring Boot框架中使用Jackson的处理总结

    1.前言 通常我们在使用Spring Boot框架时,如果没有特别指定接口的序列化类型,则会使用Spring Boot框架默认集成的Jackson框架进行处理,通过Jackson框架将服务端响应的数据 ...

  8. BeanUtils.copyProperties() 详解

    BeanUtils.copyProperties会进行类型转换:BeanUtils.copyProperties方法简单来说就是将两个字段相同的对象进行属性值的复制. 如果 两个对象之间存在名称不相同 ...

  9. read IEEE Standard for verilog(1)

    IEEE Standard for Verilog Hardware Description Language 英语说明阅读,首先看导读.目录.摘要等内容. 摘要: 1 Abstract: The V ...

  10. KingbaseES V8R6 备份恢复案例--异机备份ssh认证失败

    案例说明: 在生产环境,数据库服务被重启后,监控发现数据库物理备份的脚本无法执行,故障现象如下所示,从备份日志和sys_log中都出现了远程主机连接认证错误. 1)备份日志:(连接数据库服务器认证错误 ...