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

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.lryc.cn/news/229893.html

相关文章:

  • 【Qt之QWizard】使用1
  • 移植LVGL到单片机的一个demo简单介绍
  • rust_for_linux驱动完整版记录
  • Android拖放startDragAndDrop拖拽Glide灵活加载堆叠圆角图,Kotlin(6)
  • 计算机网络课后作业2023秋
  • 阿里云国际站:全球加速GA
  • M2LC-Net
  • Jenkins 质量扫描
  • 【LeetCode刷题笔记】滑动窗口
  • 笔试题之指针和数组的精讲
  • .secret勒索病毒数据恢复|金蝶、用友、管家婆、OA、速达、ERP等软件数据库恢复
  • junit写搜索树测试
  • 顺丰接口对接-订单创建与取消(java单元测试)
  • C++:OJ练习(每日练习!)
  • GPTs Hunter 是什么?
  • 【移远QuecPython】EC800M物联网开发板的硬件TIM定时器精准延时
  • HDU 1027:Ignatius and the Princess II ← next_permutation()
  • 主题讲座:全球增材制造现状与未来(暨香港科技大学广州|智能制造学域2024博士学位全额奖学金项目)
  • hugeGraph修改PropertyKey属性类型
  • vscode 访问本地或者远程docker环境
  • 人工智能与充电技术:携手共创智能充电新时代
  • 『自定义B站视频播放速度』
  • Java入门篇 之 继承
  • 如何计算掩膜图中多个封闭图形的面积
  • 【Nginx】CentOS 安装Nignx
  • idea 代码快捷键Mac版
  • 【NI-DAQmx入门】多通道数据采集
  • 回顾 — SFA:简化快速 AlexNet(模糊分类)
  • 基于51单片机PCF8591数字电压表数码管显示设计( proteus仿真+程序+设计报告+讲解视频)
  • 分发饼干(贪心算法+图解)