一次配置Docker环境的完整记录

一次配置Docker环境的完整记录

  • Docker环境搭建
  • 报错与解决
    • 报错一
    • 报错二
    • 报错三

在这里插入图片描述

Docker环境搭建

本节介绍了一次配置docker环境的完整记录:

  1. 编写Dockerfile文件:

    FROM pytorch/pytorch:1.10.0-cuda11.3-cudnn8-develRUN rm /etc/apt/sources.list.d/cuda.list
    RUN rm /etc/apt/sources.list.d/nvidia-ml.list
    RUN apt-key del 7fa2af80
    RUN sed -i 's/security.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list 
    RUN apt update && apt install -y build-essential vim git wget
    RUN wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-keyring_1.0-1_all.deb
    RUN dpkg -i cuda-keyring_1.0-1_all.debcopy ./requirements.txt /root/
    
  2. 构建镜像:

    # IMAGE_NAME为镜像名称,TAG为标签,缺省默认为latest,网络network使用host宿主的
    docker build -t IMAGE_NAME:TAG . --network=host
    # eg:docker build -t demo:v1.0 . --network=host
    
  3. 启动容器,并进入容器配置环境:

    docker run -it --network=host --gpus all demo:v1.0 /bin/bash
    # 第一次启动运行run命令,若容器exit停止后可以输入一下命令重新进入:
    # docker ps -a
    # docker start -ia CONTAINER_ID
    

    配置pip国内镜像源:

    # 没有自行创建
    vim ~/.config/pip/pip.conf
    

    使用阿里镜像源:

    [global]
    index-url = https://mirrors.aliyun.com/pypi/simple[install]
    trusted-host = mirrors.aliyun.com
    

    环境配置可根据自身情况进行配置,在此省略。

  4. 环境配置好后将容器导出为镜像:

    # CONTAINER_ID为容器ID;IMAGE_NAME为镜像名称;TAG为标签,缺省默认为latest
    docker commit CONTAINER_ID IMAGE_NAME:TAG
    
  5. 将docker镜像推送至仓库:

    # 仓库地址登录,输入你的用户名和密码,登录到Docker Hub。
    docker login # 推送镜像(如果你是首次推送或你的仓库设定为私有的,你可能需要先在Docker Hub上创建仓库)
    docker push IMAGE_NAME:TAG
    

报错与解决

在配置环境时,需要编译cuda代码,遇到了一系列报错,本节将介绍相关报错与解决方法。

报错一

fatal error: cuda_runtime_api.h: No such file or directory

解决办法是修改bashrc文件,指定环境变量:

vim ~/.bashrc
# CUDA
export CUDA=11.3
export PATH=/usr/local/cuda-$CUDA/bin${PATH:+:${PATH}}
export CUDA_PATH=/usr/local/cuda-$CUDA
export CUDA_HOME=/usr/local/cuda-$CUDA
export LIBRARY_PATH=$CUDA_HOME/lib64:$LIBRARY_PATH
export LD_LIBRARY_PATH=/usr/local/cuda-$CUDA/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda/extras/CUPTI/lib64:$LD_LIBRARY_PATH
export NVCC=/usr/local/cuda-$CUDA/bin/nvcc
export CFLAGS="-I$CUDA_HOME/include $CFLAGS"

修改完保存后,更新一下环境变量:

source ~/.bashrc

报错二

File "/opt/conda/lib/python3.7/site-packages/torch/utils/cpp_extension.py", line 1606, in _get_cuda_arch_flagsarch_list[-1] += '+PTX'
IndexError: list index out of range

问题的根源在于当没有检测到CUDA硬件时,torch.cuda.device_count()返回0,导致不会向arch_list中添加任何架构,arch_list[-1] += '+PTX’也就无法索引。即arch_list=[],导致无法索引。解决办法是添加环境变量,根据你的GPU compatibility修改具体的值:

CUDA_VERSION=$(/usr/local/cuda/bin/nvcc --version | sed -n 's/^.*release \([0-9]\+\.[0-9]\+\).*$/\1/p')
if [[ ${CUDA_VERSION} == 9.0* ]]; thenexport TORCH_CUDA_ARCH_LIST="3.5;5.0;6.0;7.0+PTX"
elif [[ ${CUDA_VERSION} == 9.2* ]]; thenexport TORCH_CUDA_ARCH_LIST="3.5;5.0;6.0;6.1;7.0+PTX"
elif [[ ${CUDA_VERSION} == 10.* ]]; thenexport TORCH_CUDA_ARCH_LIST="3.5;5.0;6.0;6.1;7.0;7.5+PTX"
elif [[ ${CUDA_VERSION} == 11.0* ]]; thenexport TORCH_CUDA_ARCH_LIST="3.5;5.0;6.0;6.1;7.0;7.5;8.0+PTX"
elif [[ ${CUDA_VERSION} == 11.* ]]; thenexport TORCH_CUDA_ARCH_LIST="3.5;5.0;6.0;6.1;7.0;7.5;8.0;8.6+PTX"
elseecho "unsupported cuda version."exit 1
fi

报错三

运行算法显示缺少相关依赖包:

# ImportError: libGL.so.1: cannot open shared object file: No such file or directory
apt-get install libgl1
# ImportError: libgthread-2.0.so.0: cannot open shared object file: No such file or directory
apt-get install -y libglib2.0-0 libsm6 libxrender1 libxext6
# ImportError:XXX.cpython-37m-x86_64-linux-gnu.so: undefined symbol
# 问题是编译cuda源码有问题,解决办法为启动容器时使用--gpus all,再进行源码的编译。

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

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

相关文章

LeetCode 409—— 最长回文串

阅读目录 1. 题目2. 解题思路3. 代码实现 1. 题目 2. 解题思路 要想组成回文串,那么只有最中间的字符可以是奇数个,其余字符都必须是偶数个。 所以,我们先遍历一遍字符串,统计出每个字符出现的次数。 然后如果某个字符出现了偶…

C++string类(个人笔记)

string类 1.认识string的接口以及熟练使用常用接口1.1string类对象的常见构造1.2string类对象的容量操作1.3string类对象的访问及遍历操作1.4string类对象的修改操作 2.vs 和g下string结构的说明3.string类运用的笔试题4.string类的模拟实现 1.认识string的接口以及熟练使用常用…

使用 Docker 部署 SurveyKing 调查问卷系统

1)SurveyKing 介绍 SurveyKing 是一款功能强大、操作简便的开源问卷系统。它不仅满足了用户对问卷调查的基本需求,还提供了丰富的逻辑设置和灵活的问题设置,使得问卷制作更加智能化和个性化。此外,SurveyKing 还具有快速部署和安全…

【从浅学到熟知Linux】进程控制下篇=>进程程序替换与简易Shell实现(含替换原理、execve、execvp等接口详解)

🏠关于专栏:Linux的浅学到熟知专栏用于记录Linux系统编程、网络编程等内容。 🎯每天努力一点点,技术变化看得见 文章目录 进程程序替换什么是程序替换及其原理替换函数execlexeclpexecleexecvexecvpexecvpeexecve 替换函数总结实现…

深入剖析跨境电商平台风控机制,探索测评安全与稳定的秘诀

在跨境电商测评市场鱼龙混杂的当下,测评过程中可能隐藏的陷阱保持高度警觉。多年的测评经验告诉我们,选择一个适合的测评系统对于项目的成功至关重要。近年来,测评技术如雨后春笋般涌现,市场上涌现出众多测评系统,覆盖…

配置路由器实现互通

1.实验环境 实验用具包括两台路由器(或交换机),一根双绞线缆,一台PC,一条Console 线缆。 2.需求描述 如图6.14 所示,将两台路由器的F0/0 接口相连,通过一台PC 连接设备的 Console 端口并配置P地址(192.1…

计算机网络的七层模型

序 OSl(Open System Interconnect),即开放式系统互联。一般都叫OSI参考模型。在网络编程中最重要的模型就是OSI七层网络模型和TCP/IP四层网络模型 一、OSI七层参考模型以及功能概述 二、各层的具体职能以及实际应用 1.应用层: OSI参考模型中最接近用…

官方助力:SpringAI快速尝鲜体验(SpringBoot3+Gradle8+JDK17)

SpringAI 自从OpenAI的ChatGPT爆火之后,各种AI大模型开始席卷互联网,作为知名框架的Spring官方也是小小的顺应了一波潮流,就在不久前官方推出了针对AI的部分,称为SpringAI目前最新版本为0.8.1,下面是官网的截图。 直通车https:/…

实验一:配置IP地址

1.实验环境 主机A和主机B通过一根网线相连 2.需求描述 为两台主机配置IP地址,验证IP地址是否生效,验证 同一网段的两台主机可以互通,不同网段的主机不能 直接互通 3.推荐步骤 1. 为两台主机配置P地址,主机A为10.0.10.10&#…

开发工人员必备的XCheck代码检测工具

Xcheck(Application Security Development,应用安全开发),是一款由腾讯纯自研的静态代码分析工具,它是一款致力于检查 Web 类风险的 SAST(Static Application Security Testing,静态代码分析&am…

聚生态 智算兴,超聚变的行业生态之“变”

千帆竞发浪潮涌,独领风骚显英豪。当前,在算力基础设施市场,竞争正日趋白热化。一方面,企业数字化转型走向深入,对算力产生了更加迫切的需求;另一方面,以大模型为代表的AI技术的快速发展与落地应…

十大排序——7.希尔排序

下面我们来看一下希尔排序 目录 1.介绍 2.代码实现 3.总结与思考 1.介绍 希尔排序是插入排序的一种优化,可以理解为是一种分组的插入排序。 希尔排序的要点: 简单来说,就是分组实现插入,每组元素的间隙称为gap,…

【日常记录】【CSS】利用动画延迟实现复杂动画

文章目录 1、介绍2、原理3、代码4、参考链接 1、介绍 对于这个效果而言,最先想到的就是 监听滑块的input事件来做一些操作 ,但是会发现,对于某一个节点的时候,这个样式操作起来比较麻烦 只看这个代码的话,发现他用的是动画&#x…

Java工程师常见面试题:Java基础(一)

1、JDK 和 JRE 有什么区别? JDK是Java开发工具包,它包含了JRE和开发工具(如javac编译器和java程序运行工具等),主要用于Java程序的开发。而JRE是Java运行环境,它只包含了运行Java程序所必须的环境&#xf…

记【k8s】:访问 Prometheus UI界面:kubernetes-etcd (0/1 up) Error : out of bounds

记【k8s】:访问 Prometheus UI界面:kubernetes-etcd (0/1 up) Error : out of bounds 1、报错详情2、解决方法 💖The Begin💖点点关注,收藏不迷路💖 出现 “out of bound…

java正则表达式教程

什么是正则表达式: 正则表达式是一种用来描述字符串模式的语法。在 Java 中,正则表达式通常是一个字符串,它由普通字符(例如字母、数字、标点符号等)和特殊字符(称为元字符)组成。这些特殊字符可…

酷开科技将幸福放大,第一届酷开大使启程!

注意了!第一届酷开大使来了!无论年龄、性别、职业、地域……从来自五湖四海的近千名酷粉中,经过了层层筛选之后,终于迎来了65位第一届酷开大使! 他们来自我国54个不同的城市,他们中有能人巧匠,…

Spring基础篇-快速面试笔记(速成版)

文章目录 1. Spring概述2. 控制反转(IoC)2.1 Spring声明Bean对象的方式2.2 Spring的Bean容器:BeanFactory2.3 Spring的Bean生命周期2.4 Spring的Bean的注入方式 3. Spring的事件监听器(Event Listener)3.1 Spring内置事…

【机器学习300问】71、神经网络中前向传播和反向传播是什么?

我之前写了一篇有关计算图如何帮助人们理解反向传播的文章,那为什么我还要写这篇文章呢?是因为我又学习了一个新的方法来可视化前向传播和反向传播,我想把两种方法总结在一起,方便我自己后续的复习。对了顺便附上往期文章的链接方…

Windows下IntelliJ IDEA远程连接服务器中Hadoop运行WordCount(详细版)

使用IDEA直接运行Hadoop项目,有两种方式,分别是本地式:本地安装HadoopIDEA;远程式:远程部署Hadoop,本地安装IDEA并连接, 本文介绍第二种。 一、安装配置Hadoop (1)虚拟机伪分布式 见上才艺&a…