当前位置: 首页 > article >正文

ubuntu系统docker容器中的torch,使用宿主机的gpu

1. ubuntu安装docker

2. ubuntu安装NVIDIA-container-toolkit

3. 拉取镜像

4. 启动容器

启动命令,增加--gpus all命令
示例

docker run  --gpus all -p 10022:22 -it -d -v /home/app:/app --name test_cuda test_cuda:v1.0 /bin/bash

5. 测试是否能用cuda

将测试代码映射到容器中

import torch

# 检查是否有 GPU 可用
has_gpu = torch.cuda.is_available()
print("GPU 是否可用:", "是" if has_gpu else "否")

if has_gpu:
    # 获取 GPU 的数量
    gpu_count = torch.cuda.device_count()
    print("GPU 数量:", gpu_count)
    
    # 打印每个 GPU 的名称和设备属性
    for i in range(gpu_count):
        print(f"GPU {i} - 名称:", torch.cuda.get_device_name(i))
        print(f"GPU {i} - 设备能力:", torch.cuda.get_device_capability(i))
        print(f"GPU {i} - 已分配内存:", torch.cuda.memory_allocated(i), "字节")
        print(f"GPU {i} - 已缓存内存:", torch.cuda.memory_reserved(i), "字节")

    # 打印 CUDA 版本
    cuda_version = torch.version.cuda
    print("CUDA 版本:", cuda_version)

    # 检查当前设备
    current_device = torch.cuda.current_device()
    print("当前设备 ID:", current_device)
    print("当前设备名称:", torch.cuda.get_device_name(current_device))
else:
    print("该机器没有 GPU。")

常见问题

问题1:启动容器通过-v命令挂载方式同步宿主机的文件,使用docker commit打包镜像之后,新镜像不包含该文件

直接在容器内将文件拷贝到非挂载目录,再进行提交打包,确保提交时内容在容器文件系统中。以下是具体步骤:

1. 进入容器并复制文件

进入容器的交互终端,然后把 /app 下的文件复制到容器内的其他目录(如 /opt):

bash
复制代码
docker exec -it <容器ID或容器名称> /bin/bash
cp -r /app /opt/app_backup # 将 /app 目录内容复制到 /opt/app_backup

2. 验证文件是否已复制到新目录

在容器终端中检查文件是否已复制成功:

bash
复制代码
ls /opt/app_backup # 查看新目录是否包含文件

3. 提交容器为新镜像

退出容器终端后,通过 docker commit 将容器打包为新的镜像:

bash
复制代码
docker commit <容器ID或容器名称> 新镜像名称:标签

4. 使用新镜像启动容器

使用新的镜像启动容器,不添加挂载配置,然后查看 /opt/app_backup 是否包含之前的文件:

bash
复制代码
docker run -it 新镜像名称:标签 /bin/bash
ls /opt/app_backup # 确认文件存在
这样,文件就会保存在新镜像内,即使没有挂载宿主机目录,启动的新容器也会包含这些文件。


http://www.kler.cn/a/372832.html

相关文章:

  • SAM2的Hiera作为backbone,用ptflops和thop打印的模型参数量差异巨大的可能原因
  • vue添加省市区
  • 建设NFS服务器并实现文件共享
  • 成本累计曲线:项目预算的秘密武器
  • 如何理解Js中闭包
  • Rust 基础语法与常用特性
  • 如何将原本打开Edge呈现出的360浏览器,更换成原本的Edge页面或者百度等其他页面
  • JavaFX WebView + Vue初始化加载数据解决方案
  • 基于javaweb的流浪宠物管理系统的设计与实现源码(springboot)
  • 大数据-197 数据挖掘 机器学习理论 - scikit-learn 泛化能力 交叉验证
  • 视频设备一体化监控运维方案
  • openGauss开源数据库实战十四
  • Flink难点和高频考点:Flink的反压产生原因、排查思路、优化措施和监控方法
  • 性能测试——Jmeter实战
  • DAIN-SQL,DAIL-SQL,C3-SQL和 DIN-SQL 技术的理解和异同点
  • LSTM——长短期记忆神经网络
  • Linux 调度SCHED_FIFO或SCHED_RR
  • 传统机器学习总结
  • 目标检测一阶段模型
  • BERT的中文问答系统22
  • rook-ceph mon 报错 e9 handle_auth_request failed to assign global_id
  • 时尚零售企业商品计划管理的数字化之旅
  • 「C/C++」C++设计模式 之 抽象工厂模式(Abstract Factory)
  • HTTP相关返回值异常原因分析,第二部分
  • Mac在Typora配置PicGo图床,以github为例
  • rsync异地备份