AI部署001 - C++环境部署与服务器使用

1. 前言

​ 学习AI的必经路线之一,AI模型的部署,当我们训练完模型后,想要把模型部署到我们的系统中,一般就需要考虑这个环节了。

​ 对于常用的英伟达GPU,最常用的就是C++的TensorRT,因此这里也附上我自己的学习笔记。

本节内容

  • 服务器的选择
  • C++环境的部署

目录

2. 服务器选择和使用

​ 这里采用的服务器是云服务器,平台选择的是:AutoDL,官网:https://www.autodl.com/home。

​ 介绍一下,如何使用:

  1. 地区可以任意选择,然后选择GPU型号和GPU数量,这里由于是新手尝试C++,所以都选择最差的即可,比如10系列的GPU或者20系列的GPU:

在这里插入图片描述

  1. 比如,我这里选择北京地区 - 20系列的GPU,数量为1
  2. 然后,点击“1卡可租”的按钮,进入租赁协议
  3. 我们选择基础镜像即可,可以看到基础镜像也包好了必备的miniconda、深度学习框架等等,另外,我们也可以定制,比如选择pytorch1.8版本的Ubuntu系统:

在这里插入图片描述

  1. 然后点击创建并开机即可(记得账号内得有余额才行

  2. 然后你就可以看到登录系统的SSH指令和密码

在这里插入图片描述

因为前期我们都用不到GPU,因此可以选择无卡模式启动,这样更省钱,一小时只要一毛钱:

在这里插入图片描述

3. VSCode本地与服务器配置

3.1 VSCode安装

​ 这一部直接跳过,在自己电脑安装VSCode非常简单,如果不知道如何安装,可以在CSDN论坛百度搜索,非常详细。

3.2 本地VSCode配置

​ 需要配置三个:

  • Python
  • C++
  • SSH

​ 打开VSCode,找到拓展插件部分,直接搜索python、C++、SSH,然后安装即可,以SSH安装为例子:
在这里插入图片描述

​ 安装完毕后,建议重启下软件即可。

​ 然后通过已安装那里,检测自己是否安装完成:

在这里插入图片描述

3.3 SSH连接服务器

​ 在VSCode左下角找到远程连接,点击:

在这里插入图片描述

​ 然后在弹出的窗口,输入我们服务器给我们的ssh指令,回车:

在这里插入图片描述

​ 然后,在新弹出的窗口,输入我们的密码:

在这里插入图片描述

​ 即可连接成功,如下所示:

在这里插入图片描述

3.4 配置远程服务器的VSCode环境

​ 上面我们只部署了本地VSCode的环境,这里我们需要重新走一遍上面的流程,进行部署。

​ 首先,你可以点开拓展,查看的确没有安装C++之类的:

在这里插入图片描述

​ 因此,我们需要相同配置服务器,不过这里我们只安装:

  • Python
  • C++

​ 流程和上面一样,非常简单。

4. Python使用

4.1 确保python可以正常运行

​ 通过VSCode的可视化界面,选择Linux中的一个文件夹,然后在里面创建一个demo.py的测试文件,如下:

在这里插入图片描述

因为服务器自带conda,我们可以创建一个新的虚拟环境,然后运行我们的代码:

conda create --name test
conda activate test
python demo.py

​ 不会使用conda的可以看我主页的anaconda的使用教程,很基础。

​ 结果如下:

在这里插入图片描述

​ 如果遇到报错:IMPORTANT: You may need to close and restart your shell after running ‘conda init’.

​ 使用下面指令解决:(因为没有正确退出环境)

source activate
conda deactivate
4.2 debug配置

​ 点击左侧的运行和调试:

在这里插入图片描述

​ VSCode调试代码,需要创建一个.json文件,不过不用担心,点击这个,然后勾选python File,即可自动创建这个json文件,如果不感兴趣,里面的相关参数可以不用研究,如果感兴趣,直接百度相关参数即可:

在这里插入图片描述

​ 然后,就可以正常调试了,给程序打上断点,然后启用调试即可,如下:

在这里插入图片描述

4.3 debug报错解决

​ 我遇到的错误是,说python版本过低,此时,可以如下操作:

  1. 在vscode下按下键盘:ctrl + shift + p
  2. 然后输入:Python: Select Interpreter
  3. 重新选择一个python解释器,建议选择python3.9以上的版本
  4. 这个时候在尝试debug就成功了,如下图演示:

在这里插入图片描述

5. windows下配置C++

5.1 安装mingw

​ 下载地址:https://sourceforge.net/projects/mingw/。

​ 这是一个包管理器,安装非常容易,这个非常小,可以直接默认安装:

​ 安装完成后,弹出下面的界面说明安装成功:

在这里插入图片描述

5.2 安装g++

​ 在上面的界面中,找到mingw32-gcc-g++、等安装完成后,再打开这个软件,安装一下mingw32-gdb.bin,注意Class是bin的(后面调试需要它)

在这里插入图片描述

​ 然后,点击左上角的Installation菜单中的Apply changes选项,然后管理器将开始在线安装或更新被选中的组件。

​ 等待安装完成即可

5.3 配置环境变量

​ 找到环境变量,可以是系统变量,也可以是用户变量,都可以:

​ 把我们刚刚MinGW的路径加入其中,如果是默认的话,就在C盘:

在这里插入图片描述

5.4 测试是否安装成功

​ 打开cmd,输入g++ -v或者gcc -v,如果显示下图说明成功安装:

在这里插入图片描述

6. C++配置

6.1 测试C++正常运行

​ 先创建一个C++文件,比如demo.cpp,写下下面代码:

#include <iostream>
using namespace std;

int main(){
    
    // 计算 1+2+3+4+5
    int sum {0};
    for (int i {0}; i < 5; i++)
        sum += i;
    // 输出结果
    cout <<  sum << endl;
    return 0;
    
}

​ C++是编译型语言,需要先编译,然后执行编译后的文件:

g++ demo.cpp -o demo
# 执行cpp,输出到demo,注意我这是在Ubuntu系统下的,因此g++编译器已经有了
./demo 
# 运行demo,返回结果

在这里插入图片描述

6.2 调试C++

​ 我们前面不是已经配置了python嘛,它会在目录中生成一个.vscode/launch.json的文件,这个就是配置文件,我们打开它,然后点击右下角的”添加配置“,选择C++即可:

在这里插入图片描述

​ 默认生成的配置文件,并不能直接使用,我们需要自己配置,最主要的是输入程序名字:

​ 这里我建议大家直接拷贝我整理好的,可以直接使用的调试文件:

使用方法

  1. 新建一个名为.vscode的文件夹
  2. 在其下创建三个json文件,分别名为:
  • launch.json
{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(gdb) 启动",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/release/${fileBasenameNoExtension}",  // 文件所在的文件夹路径/release/当前文件的文件名,不带后缀
            "args": [],
            "stopAtEntry": false,
            "cwd": "${fileDirname}", // 文件所在的文件夹路径
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "为 gdb 启用整齐打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                },
                {
                    "description":  "将反汇编风格设置为 Intel",
                    "text": "-gdb-set disassembly-flavor intel",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "C/C++: g++ 生成活动文件" // tasks.json的label
        },
        {
            "name": "Python: Current File",
            "type": "python",
            "request": "launch",
            "program": "${file}", // 当前文件
            // "program": "demo.py", // 指定文件
            "console": "integratedTerminal",
            "justMyCode": true // false表示可以进入第三方库(如Pytorch)里进行调试
        }
    ]
}
  • settings.json
{
    "files.associations": {
        "iostream": "cpp",
        "ostream": "cpp",
        "array": "cpp",
        "atomic": "cpp",
        "*.tcc": "cpp",
        "cctype": "cpp",
        "clocale": "cpp",
        "cmath": "cpp",
        "cstdarg": "cpp",
        "cstddef": "cpp",
        "cstdint": "cpp",
        "cstdio": "cpp",
        "cstdlib": "cpp",
        "cwchar": "cpp",
        "cwctype": "cpp",
        "deque": "cpp",
        "unordered_map": "cpp",
        "vector": "cpp",
        "exception": "cpp",
        "algorithm": "cpp",
        "functional": "cpp",
        "iterator": "cpp",
        "memory": "cpp",
        "memory_resource": "cpp",
        "numeric": "cpp",
        "optional": "cpp",
        "random": "cpp",
        "string": "cpp",
        "string_view": "cpp",
        "system_error": "cpp",
        "tuple": "cpp",
        "type_traits": "cpp",
        "utility": "cpp",
        "fstream": "cpp",
        "initializer_list": "cpp",
        "iosfwd": "cpp",
        "istream": "cpp",
        "limits": "cpp",
        "new": "cpp",
        "sstream": "cpp",
        "stdexcept": "cpp",
        "streambuf": "cpp",
        "typeinfo": "cpp",
        "bit": "cpp"
    }
}
  • tasks.json
{
	"version": "2.0.0",
	"tasks": [
		{
			"type": "cppbuild",
			"label": "C/C++: g++ 生成活动文件",
			"command": "C:/MinGW/bin/g++", // g++的路径
			"args": [
				"-fdiagnostics-color=always", // 颜色
				"-g",  // 调试信息
				"-Wall", // 开启所有警告
				"-std=c++14", // c++14标准
				"${file}", // 文件本身,仅适用于演示,无法同时编译所有文件
				// "${fileDirname}/*.cpp", // 文件所在的文件夹路径下所有cpp文件
				"-o", // 输出
				"${workspaceFolder}/release/${fileBasenameNoExtension}" // 文件所在的文件夹路径/release/当前文件的文件名,不带后缀
			],
			"options": {
				"cwd": "${fileDirname}" // 文件所在的文件夹路径
			},
			"problemMatcher": [
				"$gcc"
			],
			"group": {
				"kind": "build",
				"isDefault": true
			},
			"detail": "编译器: C:/MinGW/bin/g++"
		}
	]
}

​ 完成后,就可以对代码进行调试,它会把自动生成exe文件在一个名为releases的文件夹下,如下:

在这里插入图片描述

7. 总结

​ 本节主要学习了C++的环境部署,因为C++一般都在Ubuntu上开发,因此还学习了远程服务器的选择与使用,还有vscode如何调试代码、如何远程连接Ubuntu等内容。

​ 下一节的内容:速通C++基础知识。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐