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

平顶山 网站设计深圳做网站开发公司

平顶山 网站设计,深圳做网站开发公司,个人养老金制度是什么意思,中企动力是怎么建设网站的有时候为了容器化部署算法,经常我们需要打包我们的conda环境,我们可以看到不同的conda环境就是在不同的envs里,一个直觉就是直接拷贝走这整个目录。 有时候这样是可以work的,但是有一个潜在的问题,比如你看我进入我的…

有时候为了容器化部署算法,经常我们需要打包我们的conda环境,我们可以看到不同的conda环境就是在不同的envs里,一个直觉就是直接拷贝走这整个目录。
在这里插入图片描述
有时候这样是可以work的,但是有一个潜在的问题,比如你看我进入我的index-tts去查看我的pip指令
在这里插入图片描述
可以看到shebang行这里写死了一个从home目录下的python3.10解释器的绝对路径,而这样的库函数移植到容器里,是无论如何也找不到这个解释器的,所以就会报错。当然你有时候会足够幸运,你项目的依赖都没有这个shebang行的问题,那你的项目装进容器里就是没有问题的。当然,作为优秀的软件工程师,我们不喜欢这种不可控的模式。

那么我们有什么什么优雅的方法解决这个问题呢,哎,有的
conda-pack is all you need!
在这里插入图片描述

这里可以去conda-pack官方文件查看更多用法

把“大象”塞进 Docker 这个“冰箱”

我们现在再来看看,有了conda-pack工具后:“把大象塞进冰箱总共需要几步?”

答案很简单,总共分三步:

  1. 打开冰箱门。

准备一个基础镜像

  1. 把大象塞进去。

把conda环境放进去

  1. 关上冰箱门。

:x


步骤一:打开冰箱门 (准备目标环境)

首先,我们需要一个“冰箱”——也就是我们的 Docker 容器。我们得把它准备好,确保它有存放“大象”所需的基础设施。这个初始CUDA版本的选择,要看你的依赖使用了什么环境,如果你的git项目有官方的Dockerfile,就参考它的基础镜像,如果没有,就参考你的依赖使用的cuda版本。

在这里插入图片描述
比如我这里看到我的torch就是使用cuda12.1的版本,所以我应该选择cuda12.1相关的。这个不分不清楚的可以看一下之前的文章如何选择你的cuda镜像,CUDA和cuDNN?

比如,我们先有这么一个基础的 Dockerfile

# 使用官方提供的 CUDA 11.8 基础镜像
FROM nvidia/cuda:11.8.0-cudnn8-devel-ubuntu20.04# 设置环境变量,避免 apt-get 提示交互
ENV DEBIAN_FRONTEND=noninteractive# 安装一些基础的系统工具,比如解压工具和网络工具
RUN apt-get update && apt-get install -y --no-install-recommends \ffmpeg \tar \gzip \libgomp1 \vim \git \curl \&& rm -rf /var/lib/apt/lists/*# 设置工作目录并创建一个专门存放环境的目录
WORKDIR /workspace
ENV ENV_PATH=env
RUN mkdir -p ${ENV_PATH}

这里假设容器的规范是使用/env目录作为你的环境,所以Dockerfile这里我们有一个这个环境变量设置的指令
ENV ENV_PATH=env
RUN mkdir -p ${ENV_PATH}
后面我们会把conda里的环境都放到这里

到这里,我们的“冰箱”已经准备就绪:它基于一个带有 CUDA 的 Ubuntu 系统,并且安装了必要的工具。

步骤二:把大象塞进去 (打包并移动 Conda 环境)

conda-pack 可以将一个 Conda 环境打包成一个压缩包。 这个工具会处理好所有与路径相关的问题,解决之前我们遇到的哪个shebang行的问题。

在你的宿主机上,进入你的项目目录,执行命令来打包你的环境:

# -n 指的是环境名称
conda pack -n index-tts -o index-tts-env.tar.gz

现在,你得到了一个 index-tts-env.tar.gz 文件。这就是我们打包好的、可以轻松移动的“大象”。你的目录应该像下面图片所示,压缩包.tar.gz和代码文件和Dockerfile文件在同一目录
在这里插入图片描述

接下来,我们在 Dockerfile 中把它“塞”进冰箱并“解包”:

# 拷贝当前构建上下文的所有文件到容器内
# 其中就包括我们打包好的 index-tts-env.tar.gz
COPY . .# --- 关键步骤:解压 conda-pack 打包的环境 ---
# 将打包好的环境移动到 /env 目录并解压
# tar 的 -C 参数指定了解压的目标目录
RUN mv /workspace/index-tts-env.tar.gz ${ENV_PATH}/ \&& tar -xzf ${ENV_PATH}/index-tts-env.tar.gz -C ${ENV_PATH}/ \&& rm ${ENV_PATH}/index-tts-env.tar.gz # 解压后删除tar包,保持镜像整洁

通过这几行命令,我们将复杂的 Conda 环境完整、无损地迁移到了容器的 /env 目录中。

步骤三:关上冰箱门 (激活环境并完成配置)

“大象”已经在里面了,但我们还需要让“冰箱”知道如何使用它。我们需要告诉 Docker,当它运行命令时,应该优先使用我们刚刚放入的环境中的程序(如 python, pip 等)。

这是通过修改 PATH 环境变量来完成的:

# 将环境的 bin 目录添加到容器的 PATH 环境变量中
# 这样容器启动后就可以直接运行环境中的可执行文件
ENV PATH="${ENV_PATH}/bin:${PATH}"# 暴露服务端口
EXPOSE 8888# 定义一个假死命令,方便我们进入容器调试,确保一切正常
CMD ["sleep", "infinity"]

ENV PATH="${ENV_PATH}/bin:${PATH}" 这行代码是重点。
它获取现有的 环境变量PATH值,然后把 ${ENV_PATH}/bin 加到它的前面,这样就完成了环境变量的新增。

这里可能有一个违反直觉的地方,windows环境里,我们从系统设置里改环境变量操作得很多了,都是用的;分隔符,但是在类unix系统中,分隔符使用的是冒号:,所以这里的冒号:不是key:value的意思,而是var1;var2的意思。

写入环境变量它确保了当你在容器里执行 python 命令时,运行的是 /env/bin/python,而不是系统可能自带的其他版本。

至此,“冰箱门”已经关好。我们获得了一个包含完整、可用、隔离的 Conda 环境的 Docker 镜像。

为什么这种方法更好?

我倾向于这种数据驱动的、简单直接的方法,因为它带来了几个显而易见的好处:

  1. 更高的可靠性:conda和pip的安装有时候也会遇到问题,你不再需要在 docker build 的过程中祈祷 condapip 能够正确解析和下载所有包。你是在迁移一个已经在你本地验证过、完全可用的环境的“快照”。
  2. 更快的构建速度docker build 的过程从“在线下载并解决几十上百个包的依赖关系”变成了“解压一个本地文件”。对于大型环境,这能将镜像构建时间从几十分钟缩短到几十秒。

正如 conda-pack 官方文档所说,它对于将应用及其环境捆绑在一起进行部署非常有用。 这种方法摒弃了不必要的抽象,用最简单的函数式操作(打包 -> 拷贝 -> 解压)解决了最核心的问题,这正是我所推崇的工程哲学。


文章转载自:

http://7bZgcAh7.pphgL.cn
http://zdMlnZGC.pphgL.cn
http://ULxzUGfD.pphgL.cn
http://pJrkLnTi.pphgL.cn
http://im8ktPdt.pphgL.cn
http://HDbkjqxq.pphgL.cn
http://KEXO8m9Z.pphgL.cn
http://LTCK9ld2.pphgL.cn
http://TqENy6Ke.pphgL.cn
http://9VwUUoQi.pphgL.cn
http://3DtC9CVP.pphgL.cn
http://T5eZtuPp.pphgL.cn
http://Vur9B5y7.pphgL.cn
http://pVW8AQaI.pphgL.cn
http://6jm7K0DY.pphgL.cn
http://o3nLHmhF.pphgL.cn
http://xf17q4iz.pphgL.cn
http://5eygYhiT.pphgL.cn
http://9cZDkKbu.pphgL.cn
http://A0BygAiQ.pphgL.cn
http://3GdYyfuv.pphgL.cn
http://SglyFQO9.pphgL.cn
http://nsPok0Se.pphgL.cn
http://881uVXFm.pphgL.cn
http://kw75J3Wb.pphgL.cn
http://hhEPatDQ.pphgL.cn
http://s92CAqYE.pphgL.cn
http://UgH1nRV1.pphgL.cn
http://AUHg2G60.pphgL.cn
http://grvzfOua.pphgL.cn
http://www.dtcms.com/wzjs/712159.html

相关文章:

  • 网站建设 微信开发深圳比较好的网站建设公司
  • 网站开发工资高么深圳建设工程交易服务网宝安分中心
  • 路由器设置手机网站打不开网站建设 荆州
  • 帮开设赌场的网站做美工wordpress批量发邮
  • 橙色 网站wordpress学校管理系统
  • 网站建设综合实训总结与体会黄骅市属于哪个省
  • 网站开发的历史成品网站模板下载
  • 网站建设与维护技术浅谈论文古塔网站建设
  • 网站开发设计怎么找客户域名可以做网站名吗
  • 地方美食网站开发意义信息化建设 网站
  • 制作网站的公司办什么营业执照天津网站seo营销模板
  • 天津网站开发制作湛江的高铁站建在哪里
  • wordpress全站广告位广州建筑公司排名
  • 比较好的平面设计网站摄影主题 wordpress
  • 福州市建设工程材料价格管理系统网站宁波网页关键词优化公司
  • 建网站容易吗建设内网网站流程
  • 国外平面设计分享网站有哪些网站代码调试
  • 网站建设策划书网站发布与推广动态域名可以建网站
  • 不注册公司可以做网站吗网站哪家做得好
  • 顺德哪家做网站网络营销专业学校有哪些
  • 六安市城市建设档案馆网站购物app开发多少钱
  • 嘉兴城乡建设厅网站怎么给网站绑定域名
  • 福建城市建设厅网站开发网站需要什么硬件
  • qq教程网站源码上虞区住房和城乡建设局网站
  • 中国住房城乡建设部官方网站办公室装修费用分几年摊销
  • wordpress找不到xml国内seo排名
  • 阿里云免费网站备案网站建设可行性研究报告
  • 企业网站建设综合实训心得唐山建设网站
  • 购物网站用模板好不好安徽省建设厅网站资料下载
  • 广州网站的设计公司有赞分销模式佣金