使用 Docker 来运行 HuggingFace 海量模型

2023-11-14

本篇文章将分享如何通过 Docker 来在本地快速运行 Hugging Face 上的有趣模型。用比原项目更少的代码,和更短的时间成本将模型跑起来。

如果你熟悉 Python,那么绝大多数的模型项目,都可以用 10 分钟左右的时间,完成本地的部署和运行。

写在前面

为了方便展示,我选择了一个图像处理模型。在聊细节之前,让我们来一起看看这个模型项目的实际运行效果吧。

瞳孔和毛发细节也非常接近真实

相比较原始照片新照片清晰不少

上面的图片处理所使用的 AI 模型,是我在 Hugging Face 上找到的。随着 Hugging Face 的爆火,平台上出现了越来越多的有趣的模型和数据集,目前仅模型数量就高达 4 万 5 千多个。

这些模型有一个有趣的特点,在云平台上跑的好好的,但是一旦想在本地跑起来就得各种“费劲”折腾,项目关联的 GitHub 中总是能看到用户反馈:这个模型和代码,我本地跑不起来,运行环境和调用代码搞起来太麻烦了。

Hugging Face 的数万开放模型

其实在日常的工作和学习中,我们也会经常遇到类似上面 Hugging Face 的情况:许多模型在“云上”跑的好好的,但是一到本地就跑不起来了,这或许是因为“操作系统环境、设备 CPU 架构(x86/ ARM)差异”、或许是因为“Python 运行时版本过高或过低”、或许是因为“某个 PIP 安装的软件包版本不对”、“冗长的示例代码中写死了一堆东西”…

那么,有没有什么偷懒的方法,可以让我们绕开这些浪费时间的问题呢?

在经过了一番折腾之后,我探索出了一个相对靠谱的方案:用 Docker 容器搭配 Towhee,制作模型的一键运行环境

譬如本文开头提到的这个模型,假如我们想进行快速调用,针对我们的图片进行一个快速修复处理,真的并不难:只需要一条 docker run 命令,搭配二、三十来行 Python 代码即可。

接下来,我就以腾讯 ARC 实验室开源的 GFPGAN 模型为例,来聊聊如何快速的把网上开放的模型快速的跑起来。

GitHub 上拥有两万颗星星的 GFPGAN

因为该模型基于 PyTorch,所以本篇文章里,我们先聊聊如何制作基于 PyTorch 的模型使用的通用 Docker 基础镜像。如果同学们有需求,我就再聊聊其他模型框架。

制作 PyTorch 模型使用的通用 Docker 基础镜像

本章节的完整示例代码,我已经上传到了 GitHub:https://github.com/soulteary/docker-pytorch-playground,感兴趣的同学可以自取。如果你想进一步省事,还可以直接使用我已经构建好的镜像,来作为基础镜像使用:https://hub.docker.com/r/soulteary/docker-pytorch-playground

如果你对如何封装基础镜像感兴趣,可以继续阅读本章节,如果你只关心如何快速跑模型,可以直接阅读下一章节内容。

言归正传,出于下面三个原因,我建议想在本地快速复现模型的同学采用容器方案

  1. 想要避免不同项目之间的环境造成干扰(污染)
  2. 想要确保项目依赖清晰,任何人都能够在任何设备上复现结果
  3. 想要复现模型的时间成本更低一些,不喜欢折腾 80% 重复的模型调优之外的工作内容(尤其是环境、基础配置)

在了解到容器方案的优势之后。接下来,我们来聊聊如何编写这类基础镜像的 Dockerfile ,以及编写过程中的思考:

考虑到模型可能需要在 x86ARM 两类设备上运行,推荐使用 miniconda3 这个基于 debian 内置了 conda 工具包的基础镜像。

FROM continuumio/miniconda3:4.11.0

关于基础环境镜像的使用,我推荐大家使用具体版本号,而不是 latest,这样可以让你的容器在需要重复构建的时候,也能保持“稳定”,减少“意外的惊喜”。如果你有特殊的版本需求,可以在这里找到更适合你的镜像版本。关于 condamini conda 相关的内容,本篇文章暂不赘述,感兴趣的同学可以从官方仓库中获得更多的信息。如果有需求的话,我会写一篇更详细的文章来聊聊它。

因为我们会频繁使用 OpenGL 的 API,所以我们需要在基础镜像中安装 libgl1-mesa-glx 软件包,如果你想了解这个软件包的详情,可以阅读 debian 官方软件仓库的文档,为了让安装时间更少,这里我调整了软件源为国内的“清华源”。

RUN sed -i -e "s/deb.debian.org/mirrors.tuna.tsinghua.edu.cn/" /etc/apt/sources.list && \
    sed -i -e "s/security.debian.org/mirrors.tuna.tsinghua.edu.cn/" /etc/apt/sources.list && \
    apt update
RUN apt install -y libgl1-mesa-glx

当我们完成了基础系统依赖库的安装之后,就可以开始准备模型运行环境了,以 PyTorch 安装为例:

RUN pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
RUN conda install -y pytorch

同样为了节约 Python PyPi 软件包的下载时间,我同样将下载源切换到了国内的“清华源”。当 conda install -y pytorch 命令执行完毕之后,我们的基础的运行环境也就 OK 了。

考虑到大家的网络环境不相同,这里列出一些国内其他的常用镜像源。你可以根据你自己的情况,调整软件包下载源,来获取更快的软件包下载速度。

# 清华源
https://pypi.tuna.tsinghua.edu.cn/simple
# 阿里云
http://mirrors.aliyun.com/pypi/simple
# 百度
https://mirror.baidu.com/pypi/simple
# 中科大
https://pypi.mirrors.ustc.edu.cn/simple
# 豆瓣
http://pypi.douban.com/simple

在上面的步骤中,我们大概需要下载接近 200MB 的软件包(conda 14MB、pytorch 44MB、mkl 140MB),需要有一些耐心。

为了让我们的基础镜像环境能够兼容 x86 和 ARM,在完成上面的基础环境安装之外,我们还需要指定 torchtorchvision 版本,关于这点在PyTorch 社区里曾有过 一些讨论

RUN pip3 install --upgrade torch==1.9.0 torchvision==0.10.0

在上面的命令中,我们会将 torch 替换为指定版本。实际构建镜像的过程中,大概需要额外下载 800MB 的数据。即使我们使用了国内的软件源,时间可能也会比较漫长,可以考虑去冰箱里拿一罐冰可乐,缓解等待焦虑。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Docker 来运行 HuggingFace 海量模型 的相关文章

随机推荐

  • yolo deepsort_目标跟踪初探(DeepSORT)

    最近由于工作原因 首次接触到了目标跟踪任务 这几天读了一些该领域的优秀论文 真心感觉目标跟踪任务的难度和复杂度要比分类和目标检测高不少 具有更大的挑战性 如果你跟我一样是正在学习目标跟踪的新手 希望本文能让你对目标跟踪任务和DeepSORT
  • JavaWeb图书管理系统

    目录 1 设计任务与目的 2 设计思路 3 概要设计 3 1系统结构图设计 3 2开发工具与运行环境 4 详细设计 4 1系统用户用例图 4 2用户登录用例图 4 3业务流程图 4 4数据流程图 4 5数据字典 4 6数据库介绍 4 7 E
  • 九轴传感器之数据处理篇

    关于九轴传感器数据的处理
  • 创意灵感网站都有哪些?推荐这8个

    设计师最痛苦的事情不是 改变草稿 加班吧 但创造力已经耗尽 没有灵感 对于创意设计师来说 浏览创意网站是寻找灵感创意的关键途径 但当你寻找灵感和创造力时 你会发现一些著名的创意网站只是展示了热门图片 公众很容易厌倦 8个设计师必备的创意网站
  • python是高级语言、并不支持传统的面向过程编程_安全检查中...

  • Linux命令·find参数详解

    find一些常用参数的一些常用实例和一些具体用法和注意事项 1 使用name选项 文件名选项是find命令最常用的选项 要么单独使用该选项 要么和其他选项一起使用 可以使用某种文件名模式来匹配文件 记住要用引号将文件名模式引起来 不管当前路
  • C++小游戏:五子棋(含代码)

    怎样用c 做出五子棋呢 其实很简单 不需要很多算法和函数 下面展示代码 注释都在下面了 include
  • 《java与模式》笔记(二) 开闭原则

    4 1 什么是开闭原则 开闭原则指的是一个软件实体应对对扩展开发 对修改关闭 Software entities should be open for extension but closed for modification 这个原则是说
  • 二、删去字符串中的元音(Biweekly4)

    题目描述 给你一个字符串 S 请你删去其中的所有元音字母 a e i o u 并返回这个新字符串 示例 1 输入 leetcodeisacommunityforcoders 输出 ltcdscmmntyfrcdrs 示例 2 输入 aeio
  • 基于VLC的Unity视频播放器(一)

    思路来自 http blog csdn net yechen2320374 article details 52226294 using System using System Text using System Runtime Inter
  • Java下载Excel模板文件的实现

    在项目中经常会用到文件下载的功能 比如下载excel模板 这里简单记录一下实现过程 1 将模板文件放到项目资源文件目录中 也可以自定义其他位置 只要通过路径能找到该文件就行 2 controller层写下载的接口 下载导入模板 GetMap
  • 好多的服务器密码信息怎么保存,怎么查看已保存的远程服务器密码吗

    怎么查看已保存的远程服务器密码吗 内容精选 换一换 云服务器网络异常 防火墙未放行本地远程桌面端口 云服务器CPU负载过高等问题均可能导致云服务器无法正常登录 本节操作介绍无法登录Windows弹性云服务器的排查思路 当您的云服务器无法远程
  • 回型矩阵的打印问题

    一 输入一个矩阵 按照从外向里以顺时针的顺序依次打印出每一个数字 示例 如果输入如下矩阵 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1 2 3 4 8 12 16 15 14 13 9 5
  • mybatis搭建

    maven如何搭建 SE项目 下载maven http maven apache org download cgi bin 解压maven压缩文件 创建一个本地仓库目录 E maven E tools maven apache maven
  • 将Revit模型转入unity中

    注意 先把Revit模型放到基点中心 方便后续unity中的旋转等操作 先将Revit模型导出到Navisworks中 然后在Navisworks中把NWC导出为FBX格式 导出时单位改为毫米 FBX格式可直接拖入unity中
  • 数学建模:灰色预测模型GM(1,1)matlab实现

    灰色预测的主要特点是模型使用的不是原始数据序列 而是生成的数据序列 其核 心体系是灰色模型 GreyModel GM 即对原始数据作累加生成 或其他方法生成 得到 近似的指数规律再进行建模的方法 优点是不需要很多的数据 一般只需要4个数据
  • Angular模型

    1 变量绑定 div 名字 div
  • The request client is not a secure context and the resource is in more-private address space `priva

    问题描述 Access to XMLHttpRequest at http 192 168 1 58 8182 sockjs node info t 1672991799369 from origin http 60 28 13 253 8
  • unity中AO、metallic、roughness贴图的使用方式

    albedo和normal贴图大家应该都知道 分别是纹理贴图和法线贴图 AO metallic roughness这3种贴图又该怎么给材质添加 AO metallic贴图比较简单 在standard的shader的Occlusion和Met
  • 使用 Docker 来运行 HuggingFace 海量模型

    本篇文章将分享如何通过 Docker 来在本地快速运行 Hugging Face 上的有趣模型 用比原项目更少的代码 和更短的时间成本将模型跑起来 如果你熟悉 Python 那么绝大多数的模型项目 都可以用 10 分钟左右的时间 完成本地的