Docker+Anaconda+CUDA+cuDNN

news2024/11/26 21:35:47

一、导语

因为要复现文献的需求和实验室里师兄想要给我提升能力的多方面因素在一起,所以学习并实现了相关安装。在这里做一个记录,方便日后查看,如果能给其他同学带来便捷就更好了。

在这篇文章中,我的目标是搭建一个可以使用Pytorch的容器。

二、前置工作

首先要能够连接上服务器,不同实验室用的不一样,我们使用的是xshell和xftp,这里推荐一下,学习可以看B站视频。不同的实验室可能设置了局域网,这个需要各位自己去了解,我们是用的软件是EasyConnect。

我所在的实验室,师兄师姐们所用的服务器已经有了初步的配置,比如docker已经安装好了,好多镜像已经装好了,所以这里就不需要我再去安装了,但是需要我自己配置(因为只是给我分配了一个账户)。

首先需要学会一些基础的docker语法,这个在菜鸟教程就可以学会。当然了,如果希望学习原理,可以看这个B站的视频来学(不用全部学习,挑着学就可以)

三、搭建容器

1、查看镜像

首先使用docker images查看是否存在需要的镜像,存在即直接使用,否则需要去dockerhub官网去查找,然后下载。

docker images

看一下我的运行情况:

可以看到很多镜像,这些镜像就是一个又一个的模板。然后你可以使用这些模板创建自己的操作系统。

显然,我打算做人工智能的工作,进行深度学习的话,免不了用GPU,那么带英伟达驱动的镜像就很有必要了。当然了,再次感谢我的前辈们已经下载好了镜像,如果没有下载好镜像,一定要查看本机的显卡适配的cuda去找镜像下载!(这个教程很好找的,我自己笔记本配置GPU自学的时候就能在网上找到很多教程)

2、创建容器

所谓容器 ,就是根据模板(镜像)创建的一个操作系统,不同的容器之间互不干扰。

来看一下示例代码:

docker run --gpus all -d -p 0.0.0.0:10790:22 -it --name=karmadock -v /data/fuyp:/root nvidia/cuda /bin/bash

解释:

--gpus all 就表示使用主机所有的显卡
--name=加你想起的镜像名字 
(-v表示一个挂载文件夹 主机和docker可以共享这个文件夹,主机的文件夹要自己创建,经过我多次试错,容器内的文件夹要对应的上你将来存文件的地方)
-v 冒号前写主机文件夹:冒号后写容器文件夹
-p 表示端口映射,不然容器里面和外面是隔绝的,无法在主机里面同步更新!
这一步在创建的时候不写,那么再修改就很麻烦!
-d 表示后台运行
-it 表示可以交互

看一下我的运行效果:

然后查看容器,确定其id及状态:

docker ps

3、进入容器

可以用docker attach+ 容器的id进入容器:

docker attach 30992b9cc43f
# 注意,这个方法进入容器后,再用exit退出容器后,容器会停止运行,
# 用其他方法则不会,详见菜鸟教程
# 如果退出后找不到自己的docker,使用docker ps -a可查看所有容器;

注意前面的名字了 有个@+容器id。

4、网络安装

进行基础的网络安装: ping config(依次运行下面的代码)

apt-get update
apt install net-tools        # ifconfig 
apt install iputils-ping     # ping

完成下载!

 现在进入我们自己的docker 看看各个文件夹,发现啥也没有!因为相当于我们自己的新电脑嘛。我们就要开始装anaconda3了 !

5、安装Anaconda

可以去conda官网找自己喜欢的安装包:https://repo.anaconda.com/archive/

我选的是https://repo.anaconda.com/archive/Anaconda3-5.3.0-Linux-x86_64.sh

正式安装anaconda前先安装wget:

apt-get install -y wget

然后输入命令:

wget https://repo.anaconda.com/archive/Anaconda3-5.3.0-Linux-x86_64.sh

此时看一下容器的目录:

已经安装好了,但是此时文件是灰色的。不仅没解压,还没有可执行权限!

安装解压程序:

apt-get install bzip2

找到自己的anacnoda安装包位置:(像我就是在这个文件目录里面直接下载的,就直接在这里运行就行了,刚刚看我的ls操作就能看到安装包了)

但是很显然,这个时候安装包是没有运行权限的,现在我们给它权限:

chmod +x Anaconda3-5.3.0-Linux-x86_64.sh

现在可以看到它变成绿色了,那么就可以运行使用了!

现在开始正式安装!

./Anaconda3-5.3.0-Linux-x86_64.sh

值得注意是,基本上是回车,一直yes ,不过vscode可装可不装,自己看着办(我选择不装,我不喜欢用)

(因为基本上一路yes,所以要留意一下这个安装位置)

然后输入conda -V 看看是不是显示。如果报错说不是该命令,那么,就是没有把anaconda3/bin的路径配置到环境变量里面去,那么接下来就是去配置环境变量!

这个时候让之前记的安装位置和配置文件地址就有用了

/root/.bashrc

可以看到再次报错,居然没有权限去改?其实不是的,师兄给我的是有root权限的,那么真相只有一个!那就是这个文件现在不可用,需要我们手动给权限:

我们先进root文件夹,再查看所有的文件情况:

cd /root
ls -al ~/

现在给权限:

chmod 766 ~/.bashrc

对比十分明显,那么接下来对环境变量进行配置:

结果依然报错,那么我们下载一个可以编辑这个玩意的插件:

apt-get install vim

之后输入y就行了。

这次这样运行代码:

vim /root/.bashrc

运行后出现这样的界面,就是这个文件内部了:

先按i,这样就可以编辑了(代表insert),将下面这句放到文件尾部:

export PATH=/root/anaconda3/bin:$PATH

# 这个要依据具体你的文件位置来修改,我的这个由来是之前截图的地方强调过了

然后按esc,再按:wq并回车就可以了。

回到终端后还有最后一步:激活刚刚的配置文件

source ~/.bashrc

这下就没有问题了!

接下来可以删除anaconda的安装包,当然,空间足够大也可以不删。

rm -rf /home/Anaconda3-5.3.0-Linux-x86_64.sh

四、使用容器

上一步当然可以继续操作,如果有事先走,那就先退出,然后这样:

docker start id
docker attach id

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

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

相关文章

Spark_Spark高阶特性

wscg filter导致断链 Codegen 向量化 simdjson Orc Parquet 支持批量读取 spark本身对parquet支持比较好,因为parquet

04_Flutter自定义Slider滑块

04_Flutter自定义Slider滑块 一.Slider控件基本用法 Column(mainAxisAlignment: MainAxisAlignment.start,children: <Widget>[Text("sliderValue: ${_sliderValue.toInt()}"),Slider(value: _sliderValue,min: 0,max: 100,divisions: 10,thumbColor: Colors.…

二叉树的最近公共祖先(C++实现)

二叉树的最近公共祖先 题目思路代码&#xff08;详细注释&#xff09; 题目 二叉树的最近公共祖先 思路 我们可以通过两个栈来实现 实现一个FindPath函数&#xff0c;用来查找从根节点到目标节点的路径&#xff08;路径可以用栈来保存&#xff09; 路径保存好后&#xff0c;…

黄金比例设计软件Goldie App mac中文版介绍

Goldie App mac是一款测量可视化黄金比例的工具。专门为设计师打造&#xff0c;可以帮助他们在Mac上测量和可视化黄金比例&#xff0c;从而轻松创建出完美、平衡的设计。 Goldie App mac体积小巧&#xff0c;可以驻留在系统的菜单栏之上&#xff0c;随时提供给用户调用。 拥有独…

uniapp设置手机通知权限

提醒用户开启通知权限&#xff0c;与unipush功能联用 效果图&#xff1a; 方法&#xff1a; 直接使用即可&#xff0c;在真机或模拟器运行 setPermissions() {// #ifdef APP-PLUS if (plus.os.name Android) { // 判断是Androidvar main plus.android.runtimeMainActivity…

【LeetCode刷题-链表】--86.分隔链表

86.分隔链表 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val val; }* ListNode(int val, ListNode next) { this.val val; this.next next; }* }*/ class…

文件服务器迁移

文件服务器迁移还是比较简单的 win server加域 导出配额文件 选中所有项&#xff0c;点击导出 导出共享文件夹权限列表 导出文件夹的权限表&#xff0c;留作备用。需要用到“icacls” icacls c:\windows\* /save aclfile /t # C:\Windows 目录及其子目录中所有文件的 DAC…

等保——密评技术要求

密评简介 密评定义&#xff1a;全称商用密码应用安全评估, 是指对采用商用密码技术、产品和服务集成建设的网络和信息系统密码应用的合规性、正确性、有效性进行评估。密评对象&#xff1a;重要信息系统、关键信息基础设施、网络安全等保三级及以上的系统。评测依据&#xff1…

OpenCV数字图像处理——检测出图像中的几何形状并测量出边长、直径、内角

一、简介 在传统的自动化生产尺寸测量中&#xff0c;常用的方法是利用卡尺或千分尺对被测工件的某个参数进行多次测量&#xff0c;并取这些测量值的平均值。然而&#xff0c;这些传统的检测设备或手动测量方法存在着一些问题&#xff1a;测量精度不高、测量速度缓慢&#xff0…

使用std::mutext与std::condition_variables实现信号量

1. 信号量的定义 2. 使用std::mutext与std::condition_variables实现信号量 代码来自&#xff1a;https://zhuanlan.zhihu.com/p/462668211 #ifndef _SEMAPHORE_H #define _SEMAPHORE_H #include <mutex> #include <condition_variable> using namespace std;cla…

JSP forEach标签varStatus使用讲解(了解即可 基本用不到)

上文 JSP迭代标签之 forEach循环标签 基本使用讲解 我们讲了一下forEach标签 大多数时候会用的语法 但是varStatus 没有讲到 因为我觉得这个东西 做个了解就好了 如果你不感兴趣都可以不看 因为感觉开发中基本是用不到的 但是 官方有提供 我还是说一下 当前遍历的基本信息 包括…

postman接口测试教程与实例分享

postman 的界面图 各个功能区的使用如下&#xff1a; 快捷区&#xff1a; 快捷区提供常用的操作入口&#xff0c;包括运行收藏夹的一组测试数据&#xff0c;导入别人共享的收藏夹测试数据&#xff08;Import from file, Import from folder, Import from link等&#xff09;&…

【Python】获取ip

要使用Python获取IP地址&#xff0c;可以使用socket库中的gethostname()函数和gethostbyname()函数。 import socketdef get_ip_address():hostname socket.gethostname()ip_address socket.gethostbyname(hostname)return ip_addressip get_ip_address() print("IP地…

成功的蓝图:实现长期成长与卓越表现的 6 项策略

能在收入和利润上持续领先同行的公司寥寥无几&#xff0c;不到四分之一。McKinsey的最新研究揭示了这些增长标杆公司与众不同的六大心态和策略。过度谨慎的公司&#xff0c;尤其在动荡时期&#xff0c;也许能捱过当下&#xff0c;但往往无法发掘全部潜力。考虑到近五年历经前所…

事务的自动提交机制和隐式提交机制

自动提交机制就是一个sql语句完成默认提交一次&#xff0c;也就是说一个sql语句是原子性的。想关闭这种功能&#xff0c;两种方式一种写START TRANSACTION&#xff0c;另一种SET autocommit OFF 隐式提交机制&#xff0c;在START TRANSACTION后&#xff0c;会有一些情况导致语…

在centos7上源码安装nginx

1. 安装必要的编译工具和依赖项 在编译Nginx之前&#xff0c;你需要安装一些编译工具和依赖项。可以通过以下命令安装&#xff1a; yum install gcc-c pcre-devel zlib-devel make 2. 下载Nginx源代码 从Nginx官网下载最新的源代码。你可以使用wget命令来下载&#xff1a; …

LLM、ChatGPT与多模态必读论文150篇

为了写本 ChatGPT 笔记&#xff0c;我和10来位博士、业界大佬&#xff0c;在过去半年翻了大量中英文资料/paper&#xff0c;读完 ChatGPT 相关技术的150篇论文&#xff0c;当然还在不断深入。 由此而感慨&#xff1a; 读的论文越多&#xff0c;你会发现大部分人对ChatGPT的技…

解决electron-build打包后运行app报错:cannot find module xxx

现象&#xff1a; 关于这个问题查了很多资料&#xff0c;也问了chatgpt都没有找到答案。 最后只能靠自己了。 于是冷静下来回想一下细节。突然发现了一个特别点。 eletron-builder打包时&#xff0c;强制要求eletron-builder和eletron必须都放在devDependencies 否则&#…

001-调用函数访问结构体数组成员,并修改其数值

1 代码 /*调用函数访问结构体数组成员&#xff0c;并修改其数值 */ #include <stdio.h> /* for printf */ #include <stdlib.h> /* for exit */struct mytest{char a ;char b ;char c ; };void p_find_test(struct mytest *aaa) {struct mytest *test aaa…

这个变量要不要用volatile修饰呢?

正文 大家好&#xff0c;又见面了&#xff0c;我是bug菌~ 在嵌入式软件开发过程中&#xff0c;如果对volatile不熟&#xff0c;那可以你应该是个"假嵌入式程序员"&#xff0c;因为一个变量需不需要使用volatile考虑的场景挺多的&#xff0c;如果在某些场景下乱用&…