docker应用实例及dockerfile

实际应用

神经网络项目由x86cpu的linux环境移到arm cpu架构上运行,使用docker进行测试以及环境配置。

  • docker load -i 镜像压缩文件.tar
    • docker load -i命令用于从一个压缩的镜像存档文件(通常是以.tar扩展名结尾)中加载镜像到本地Docker引擎中。
    • docker load:加载一个本地的镜像。
    • -i:指定输入文件,后面跟着要加载的镜像存档文件。
  • docker images 查看镜像
  • docker run --name 容器名 -it -e ASCEND_VISIBLE_DEVICES=0 -p 1234:5678 镜像id /bin/bash
    • docker run:运行一个新的容器。
    • -it:使用交互式终端运行容器,其中-i表示交互式,-t表示分配一个伪终端。
    • -e ASCEND_VISIBLE_DEVICES=0。环境变量选择使用哪个NPU卡
    • -p 1234:5678:端口映射,容器内部端口与宿主机端口进行映射
    • /bin/bash:进入到容器的bash终端
  • docker rename 原名称 现名称
  • docker cp <source_path> <container_name>:<destination_path>
  • docker ps
    • 查看正在运行的容器
  • docker ps -a
    • 查看所有容器
  • docker start 容器名
  • dockers stop 容器名
  • docker rm 容器名
  • docker exec -it <container_name> <command>
    • <container_name> 是要进入的容器的名称或ID。
    • <command> 是要在容器内执行的命令。通常,我们使用/bin/bash或/bin/sh作为命令,以启动一个交互式Shell会话。

在Docker容器中安装NPU驱动固件(宿主机装了,docker可以不装)

  • 在宿主机上已经安装了相应的NPU驱动和固件。
  • 容器在创建时,需要与宿主机共享NPU设备。
    • docker run --privileged -it -v /dev:/dev <image_name> bash
    • --privileged参数来赋予容器特权,使其能够访问宿主机的设备。同时,使用-v /dev:/dev参数来共享宿主机的/dev目录,包括其中的设备文件。

ChatGLM部署华为arm服务器

  • 安装toolkit工具包
  • 容器内没安装NPU驱动固件,所以需要到.bashrc中配置环境变量
    • 环境变量要加export xxx=xxxx
  • 安装torch依赖
  • 解压代码包
  • 创建模型权重软链接
  • 替换transformers的utils.py文件(可以先不做)
  • 权重切分与执行

Docker架构

镜像(三类)

  • 基础镜像

Ubuntu、Debian、CentOs、Windows、MacOs

  • docker commit构建镜像

Docker commit 是将正在运行的容器保存为新的镜像的一种方法。将当前容器的状态快照成一个新的镜像。优点快速和方便,缺点占用空间大、冗余、效率低、可重复性弱、容易出错。

  • 从镜像运行容器,实际上是在镜像顶部上加了一层可写层,所有对容器文件系统的修改,都在这一层中进行,不影响已经存在的层。从容器构建镜像,实际上是把容器的顶层固化到镜像中。镜像的体积只会增大,不会减小。
# 将容器转换为镜像
docker commit 容器id 镜像名称:版本号
# 将镜像打包为压缩包,用于传输
docker save -o image_name.tar image_name
# 将镜像压缩包解压为镜像
docker load -i image_name.tar
  • dockerfile构建镜像

Dockerfile 是一种文本文件,它包含了一系列指令和配置,用于自动化构建 Docker 镜像。优点灵活性和可重复性。比docker commit更具优势。

  • 可重复性:使用 Dockerfile 可以完全复制镜像构建过程,确保每次构建的结果一致。
  • 可扩展性:Dockerfile 允许您定义容器的多个层次,并在每个层次上进行构建和修改。轻松地添加、删除或更新组件。
  • 可维护性:Dockerfile 是一个文本文件,可以与代码存储在同一版本控制系统中,并且可以通过版本控制工具进行追踪和管理。这使得团队成员可以共同协作和维护镜像构建过程。

容器

仓库

仓库可看成一个代码控制中心,用来保存镜像 Docker Hub(https://hub.docker.com)

dockerfile

FROM acltransformer:base  # ubuntu:18.04 指定父镜像,指定dockerfile基于哪个镜像进行创建以华为昇腾172.16.15服务器为例RUN apt-get update && apt-get install -y \  # 执行命令wget \language-pack-zh-hans && \mkdir /dataWORKDIR /data  # 工作目录
COPY Dockerfile_dir ./Dockerfile_dir  # 复制文件 这是个文件夹WORKDIR /data/Dockerfile_dir/npu_tools
RUN /bin/bash Miniconda3-latest-Linux-aarch64.sh -b -p /opt/conda && \echo 'export PATH="/opt/conda/bin:$PATH"' >> ~/.bashrc && \RUN conda create -n py37 python=3.7
ENV PATH /opt/conda/envs/chatglm_py37/bin:$PATH  # 环境变量RUN /bin/bash npu_env.sh && \pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simpleENTRYPOINT ["/bin/bash",  "-c", "/opt/conda/envs/py37/bin/python3.7 main.py"] # 设置容器的入口点

在编写 Dockerfile 时,通常会遵循一个原则:尽可能使步骤少而有效。

  • 减小镜像大小:每个步骤都会在镜像中创建一个新的层次,并增加镜像的大小。较少的步骤意味着较少的层次,从而减小了镜像的总体大小。
  • 提高构建速度:每个步骤都需要执行一些操作,较少的步骤意味着较少的操作,从而减少了构建过程的时间。
  • 简化维护和调试:较少的步骤意味着较少的代码和配置,使得维护和调试变得更加简单。

使用下面命令来用dockerfile创建docker镜像。

docker build -t chatglm_npu:v2 -f Dockerfile .
docker build --platform linux/arm64/v8 -t chatglm_npu:v1 -f Dockerfile .
docker build --platform linux/amd64 -t dispatch:v1 -f Dockerfile .

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

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

相关文章

API支付接口

在数字化时代&#xff0c;API&#xff08;Application Programming Interface&#xff0c;应用程序编程接口&#xff09;支付接口已成为电子商务和移动支付领域的核心技术。它们作为软件之间的桥梁&#xff0c;使得商家能够无缝地整合各种支付服务&#xff0c;从而为消费者提供…

vscode设置vue3代码格式化

vscode设置vue3代码格式化 vscode设置vue3代码格式化 下载插件设置格式化时选用的插件实际使用 使用Prettier默认配置使用Prettier添加自定义配置使用Volar 完整配置文件参考链接 下载插件 可以使用Volar或Prettier 设置格式化时选用的插件 mac&#xff1a;【shift】【op…

【C++】类与对象 I

类与对象 I &#xff1a; 前言&#xff1a;&#xff08;C&#xff09;面向过程 和&#xff08;C&#xff09;面向对象 初步认识前言&#xff1a;类的引入一、类的介绍二、类的定义&#xff08;一&#xff09;class 语法&#xff08;二&#xff09;类的两种定义方式&#xff1a;…

【MySql系列】深入解析数据库索引

写在前面 MySQL索引是数据库中一个关键的概念&#xff0c;它可以极大地提高查询性能&#xff0c;加快数据检索速度。但是&#xff0c;要充分发挥索引的作用&#xff0c;需要深入理解它们的工作原理和使用方式。 在本文中&#xff0c;我们将深入解析MySQL索引&#xff0c;探讨它…

JavaWeb——CSS3的使用

目录 1. CSS概述 2. CSS引入方式 3. CSS颜色显示 4. CSS选择器 4.1. 元素&#xff08;标签&#xff09;选择器 4.2. id选择器 4.3. 类选择器 4.4. 三者优先级 5. 盒子模型 1. CSS概述 CSS&#xff0c;全称为“Cascading Style Sheets”&#xff0c;中文译为“层叠样式…

除了http还有哪些通信协议?

除了HTTP协议外&#xff0c;还存在许多其他通信协议。以下是一些常见的通信协议&#xff1a; 1&#xff1a;HTTPS&#xff1a;HTTPS&#xff08;HTTP Secure&#xff09;是HTTP的安全版本&#xff0c;通过使用SSL&#xff08;Secure Sockets Layer&#xff09;或TLS&#xff0…

三、Vue3中使用Pinia修改State的方法

修改Pinia仓库的值有5种方式 src/store/index.ts import { defineStore } from pinia; import { Names } from ./store-name; export const useTestStore defineStore(Names.Test, {state:()>{return {current:1111,name: 小满111}},getters:{ // 类似computed计算属性 同…

OpenMediaVault控制台web页面密码重置

要重置 OpenMediaVault&#xff08;OMV&#xff09;Web 控制台的密码&#xff0c;可以使用 omv-firstaid 命令行工具中的相应选项。按照以下步骤进行操作&#xff1a; 以管理员权限登录到 OMV 的命令行界面&#xff08;通过 SSH 或直接登录&#xff09;。 ssh登陆到root用户 运…

ubuntu 怎么安装图形界面

ubuntu 安装图形界面的方法&#xff0c;可以通过以下步骤操作来实现&#xff1a; 1、确认版本首先登录一下服务纯缺器ubuntu&#xff0c;查看系统版本。然后用root账号登录&#xff0c;如下图所示&#xff1a; 2、更新apt-get首先要先更新一下apt-get源&#xff0c;输入apt-g…

k8s实践

k8s作为分布式集群部署方案&#xff0c;是一个主流的部署方案。 1. 服务器配置 至少准备3台服务器&#xff0c;首先修改服务器名称 hostnamectl set-hostname k8s-master hostnamectl set-hostname k8s-node1 hostnamectl set-hostname k8s-node2然后关闭防火墙和selinux s…

Linux安装java jdk配置环境 方便查询

编辑/etc/profile文件&#xff1a; vim /etc/profile 在文件尾部添加如下配置&#xff1a; export JAVA_HOME/usr/local/jdk1.8.0_161/ export CLASSPATH.: J A V A H O M E / j r e / l i b / r t . j a r : JAVA_HOME/jre/lib/rt.jar: JAVAH​OME/jre/lib/rt.jar:JAVA_HOME/l…

HBase学习笔记(2)—— API使用

对HBase中常用的API操作进行简单的介绍 对应HBase学习笔记&#xff08;1&#xff09;—— 知识点总结-CSDN博客中介绍的HBase Shell常用操作 更多用法请参考官网&#xff1a;Apache HBase ™ Reference Guide 依赖导入 <dependencies><dependency><groupId>o…

【数据仓库】数仓分层方法详解与层次调用规范

文章目录 一. 数仓分层的意义1. 清晰数据结构。2. 减少重复开发3. 方便数据血缘追踪4. 把复杂问题简单化5. 屏蔽原始数据的异常6. 数据仓库的可维护性 二. 如何进行数仓分层&#xff1f;1. ODS层2. DW层2.1. DW层分类2.2. DWD层2.3. DWS 3. ADS层 4、层次调用规范 一. 数仓分层…

Oracle使用块更改跟踪改善增量备份的性能

1.概述 增量备份的块更改跟踪功能&#xff0c;通过在块更改跟踪文件中的每个数据文件中记录更改的块来提高增量备份的性能。 此文件是存储在数据库区域中的小型二进制文件。 RMAN在生成重做时&#xff0c;跟踪更改的块。 如启用了块更改跟踪&#xff0c;则RMAN将使用更改跟踪文…

2023NOIP A层联测31 总结

T1 有一个长为 n n n 的序列 { a i } \{a_i\} {ai​}&#xff0c;你可以操作若干次&#xff1a;选择一个 i i i&#xff0c;花费 c x c_x cx​ 元将 a i a_i ai​ 变为 ⌊ a i x ⌋ ⌊\frac{a_i}x⌋ ⌊xai​​⌋&#xff0c;你总共有 K K K 元。问最终序列的中位数最小…

25.4 MySQL 函数

1. 函数的介绍 1.1 函数简介 在编程中, 函数是一种组织代码的方式, 用于执行特定任务. 它是一段可以被重复使用的代码块, 通常接受一些输入(参数)然后返回一个输出. 函数可以帮助开发者将大型程序分解为更小的, 更易于管理的部分, 提高代码的可读性和可维护性.函数在编程语言…

[01]汇川IMC30G-E系列运动控制卡应用笔记

简介 IMC30G-E系列产品是汇川技术自主研制的高性能EtherCAT网络型运动控制器&#xff08;卡&#xff09;&#xff0c;同时兼容脉冲轴的控制&#xff1b;IMC30G-E支持点位/JOG、插补、多轴同步、高速位置比较输出、PWM等全面的运动控制功能&#xff0c;具备高同步控制精度。 开发…

Leetcode 160. 相交链表

1. 题解 将null也作为了一种节点&#xff0c;所以&#xff0c;当两条链表是平行的话&#xff0c;最终他们也都会指向null值这个虚拟节点上。 curA 指向 链表A curB 指向 链表B 如果走到结尾 指向另一链表的首部重新走 curA 走了 a c b curB 走了 b c a注意&#xff1a;关…

修改Openwrt软路由的web端口

如何修改openwrt路由器的web访问端口号&#xff1f; 在OpenWrt路由器上&#xff0c;如何修改Web访问端口号&#xff0c;通常涉及到修改HTTP服务器的配置文件。默认情况下&#xff0c;OpenWrt使用的HTTP服务器是uHTTPd。 以下是修改Web访问端口号的步骤&#xff1a; 一、通过…

Dell笔记本电脑 启动时提示解决

https://www.dell.com/support/kbdoc/en-us/000139731/what-the-headless-operation-mode-active-post-message-means-and-how-to-stop-it-appearing-during-start-up dell官方解释&#xff1a; 提示来自于BIOS/UEFI固件中POST Behaviar&#xff0c;只要打开了忽略警告、错误…