Python3.11二进制AI项目程序打包为苹果Mac App(DMG)-应用程序pyinstaller制作流程(AppleSilicon)

news/2024/11/13 14:43:42/文章来源:https://www.cnblogs.com/v3ucn/p/18379269

众所周知,苹果MacOs系统虽然贵为Unix内核系统,但由于系统不支持N卡,所以如果想在本地跑AI项目,还需要对相关的AI模块进行定制化操作,本次我们演示一下如何将基于Python3.11的AI项目程序打包为MacOS可以直接运行的DMG安装包,可以苹果系统中一键运行AI项目。

MacOs本地部署AI项目

首先确保本地已经安装好 arm 内核的Python3.11程序,可以在Python官网进行下载和安装:python.org

这里以快手团队著名的表情迁移项目 LivePortrait 为例子,首先克隆快手团队官方的项目:

git clone https://github.com/KwaiVGI/LivePortrait.git

进入项目的目录:

cd LivePortrait

安装基于Mac系统的相关依赖:

# for macOS with Apple Silicon users  
pip install -r requirements_macOS.txt

随后修改app.py文件,在代码上方加入环境变量的设置:

# coding: utf-8  """  
The entrance of the gradio for human  
"""  import os  
os.environ["PYTORCH_ENABLE_MPS_FALLBACK"] = "1"

PYTORCH_ENABLE_MPS_FALLBACK=1 这个环境变量用于 PyTorch 中的 MPS(Metal Performance Shaders)加速功能。

MPS 是苹果公司为 macOS 和 iOS 设备提供的图形处理单元 (GPU) 框架,可以加速机器学习模型的训练和推理。

PYTORCH_ENABLE_MPS_FALLBACK=1 表示启用 MPS 回退功能。当 PyTorch 检测到设备支持 MPS 时,它会优先使用 MPS 进行加速。如果 MPS 无法使用,它会回退到 CPU 上运行。
简而言之,设置这个环境变量可以帮助 PyTorch 在支持 MPS 的设备上利用 GPU 加速,并在不支持 MPS 的设备上正常运行。

如果不单独设置这个变量,启用推理的时候会报错。

随后,启动推理页面进行测试:

python3 app.py

注意,由于xpose暂不支持mps推理,所以mac版本不支持动物表情驱动,只支持人物的表情驱动。

如果推理没有问题,那么可以开始进行打包操作了。

MacOs本地打包AI项目

首先,安装pyinstaller库:

pip3 install -U pyinstaller

随后,创建 app.spec 项目配置文件:

# -*- mode: python ; coding: utf-8 -*-  
import sys  
sys.setrecursionlimit(5000)  
from PyInstaller.utils.hooks import collect_data_files  datas = []  
datas += collect_data_files('gradio_client')  
datas += collect_data_files('gradio')  a = Analysis(  ['app.py',  ],  pathex=['/Users/liuyue/Downloads/LivePortrait_For_Mac'],  binaries=[],  datas=datas,  hiddenimports=[],  hookspath=[],  hooksconfig={},  runtime_hooks=[],  excludes=[],  noarchive=False,  optimize=0,  module_collection_mode={ 'gradio': 'py'}  
)  
pyz = PYZ(a.pure)  exe = EXE(  pyz,  a.scripts,  [],  exclude_binaries=True,  name='LivePortrait',  icon='AnyConv.com__paints_logo.icns',  debug=False,  bootloader_ignore_signals=False,  strip=False,  upx=True,  console=True,  disable_windowed_traceback=False,  argv_emulation=False,  target_arch=None,  codesign_identity=None,  entitlements_file=None,  
)  a.datas += Tree('./pretrained_weights', prefix='pretrained_weights')  coll = COLLECT(  exe,  a.binaries,  a.datas,  strip=False,  upx=True,  upx_exclude=[],  name='LivePortrait',  
)

这里按照 pyinstaller 官方文档对项目的入口文件,依赖文件,三方目录等进行声明。

接着运行打包命令:

pyinstaller webui.spec

程序返回:

98124 INFO: Rewriting the executable's macOS SDK version (13.1.0) to match the SDK version of the Python library (12.1.0) in order to avoid inconsistent behavior and potential UI issues in the frozen application.  
98125 INFO: Re-signing the EXE  
98243 INFO: Building EXE from EXE-00.toc completed successfully.  
98244 INFO: checking Tree  
98244 INFO: Building Tree because Tree-00.toc is non existent  
98244 INFO: Building Tree Tree-00.toc  
98265 INFO: checking COLLECT  
98266 INFO: Building COLLECT because COLLECT-00.toc is non existent  
98266 INFO: Building COLLECT COLLECT-00.toc  
108930 INFO: Building COLLECT COLLECT-00.toc completed successfully.

代表打包成功,在项目的 dist 目录下会生成可执行程序:

双击 LivePortrait 图标进行测试即可。

至此,程序就打包好了。

MacOs本地构建DMG安装包

随后,运行磁盘工具,新建一个磁盘文件:

注意格式必须是 mac os 扩展(日志式),体积需要大于2G

接着把刚才打包好的项目文件拷贝到新建的磁盘中即可。

随后推出磁盘,点击映像-》转换,对磁盘文件进行压缩。

最后我们得到一个压缩好的DMG安装文件:

➜  mac ll  
total 5328720  
-rw-r--r--@ 1 liuyue  staff   2.5G  8 20 19:49 LivePortrait(已转换).dmg

在别的Mac电脑中双击安装包打开运行即可。

至此我们就走完了整个MacOS的AI项目程序制作流程,最后,奉上打包好的程序文件,与众乡亲同飨:

新版LivePortrait整合包(苹果MacOsAppleSilicon)图片引擎 https://pan.quark.cn/s/53c24cd845b9

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

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

相关文章

2.MapReduce论文总结

一. 介绍很多业务逻辑很简单,主要难点是数据量太大,可使用分布式处理提高速度。 传统分布式程序,计算逻辑和分布式任务分发、故障恢复混在一起,原本简单的计算逻辑变得模糊不清,难以处理。 MapReduce将两者分离,任务分发,容错,恢复等逻辑由模型完成,程序员只需要专注计…

Lab1 记录

一、非并行版本分析 1.非并行版本MapReduce流程通过第一个参数,传入Map和Reduce 函数 之后的参数为待处理文件名 读取文件 调用Map函数,对文件内容进行处理,生成KV对 对KV对进行sort 按照Key进行分组,然后对每组数据调用Reduce 将结果写入文件二、Lab思路 概述:Worker向Co…

JMeter:性能测试利器全解析

目录JMeter:性能测试利器全解析一、JMeter 的基础概念(一)什么是 JMeter(二)主要功能特点二、使用 JMeter 测试 Web 应用的步骤(一)安装与启动(二)创建测试计划(三)配置 Web 应用测试场景(四)运行测试(五)分析测试结果三、案例分析(一)案例背景(二)测试步骤…

ZBlogPHP迁移网站错误提示:Permission denied(请确保你的网站有写入权限777)

解决方案:设置你的网站目录为777 写入权限即可【注意:如果755可能会不行,最好直接使用777搞定】扫码添加技术【解决问题】专注中小企业网站建设、网站安全12年。熟悉各种CMS,精通PHP+MYSQL、HTML5、CSS3、Javascript等。承接:企业仿站、网站修改、网站改版、BUG修复、问题…

zblog网站提示MySQL数据库无法连接

前天搭建好的博客网站,在睡了一觉之后,网站竟然出现故障无法正常运行了,在此期间,没有进行任何的操作。就连主页都无法进入,页面一直提示“MySQL 数据库无法连接”。不管怎样刷新页面,还是重启服务器,都毫无作用。 最终,从中午 1 点一直忙活到凌晨 2 点,还好皇天不负有…

20-学习卷积核

import torch import torch.nn as nnX = torch.rand((6, 8)) Y = torch.rand((6, 7))# (批量⼤⼩、通道、⾼度、宽度) X = X.reshape((1, 1, 6, 8)) Y = Y.reshape((1, 1, 6, 7)) lr = 3e-2# 构造卷积层 PyTorch 会使用默认的初始化方法,例如 Xavier 初始化或 Kaim 初始化…

这下罄竹难书了

/ /由四个金牌命制的联赛模拟试卷,使我校高二高三竞赛班取得了一试最高 84 分,加试最高 160 分的好成绩! 一试 一、填空题如图是一个 \(4\times 4\) 的正方形方格表,则最少需要 \(\text{_____}\) 条直线,才能使得每个方格都被至少一条直线穿过。设复数 \(z\) 满足:\(\fra…

解决Z-blog数据库链接错误?

你是否也曾遇到过在登录 Z-blog 博客时,系统显示“错误原因: 数据库连接错误”这样的状况呢?频繁出现此种情况对于 SEO 优化而言是极为不利的。那么,究竟应当如何解决 Z-blog 数据库链接错误的问题呢?首先,我们得深入剖析为何会产生这样的状况,其原因主要有两点。不管是…

Java中stream的详细用法

原文地址:https://www.cnblogs.com/Ao0216/p/15319553.html 一、概述 Stream 是 Java8 中处理集合的关键抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找、过滤和映射数据等操作。使用Stream API 对集合数据进行操作,就类似于使用 SQL 执行的数据库查询…

zblogphp的错误提示分为“错误原因”和“文件位置”两个部分

zblogphp 的错误提示主要划分为“错误原因”以及“文件位置”这两个部分。 就“错误原因”而言,其通常是由一系列的专业术语所构成的,对于不熟悉 php 的人来说,可能难以理解。 但别担心,您可以将其复制下来,然后使用百度翻译之类的工具进行翻译,说不定运气好的话能大概弄…

zblogphp错误之“未知方法或属性 (set_error_handler)“解决办法

zblogphp 程序中出现的一个错误。错误信息为“(512)E_USER_WARNING : 未知方法或属性 (set_error_handler) (1.5.1.1740 (Zero)) (Linux; Apache; PHP 5.2.17; mysqli; curl)”。产生该错误的原因通常是用户对 zblogphp 程序进行了升级,从 1.4 到 1.5 版本修改了部分函数名称,…

Zblog固定域名出错不能登入

如果设置了固定域名,而出现不能登入的时候,请连接上网站的FTP, 然后修改zb_users/c_option.php这个文件 在);之前,加入一行 ZC_PERMANENT_DOMAIN_WHOLE_DISABLE => true, 然后保存,就可以登录后台关掉固定域名设置,再回到c_option.php把加入的这一行删除掉。 删除掉后…