LAVIS在Mac,M1PRO芯片下的安装实战

LAVIS在Mac,M1PRO芯片下的安装实战

契机

⚙ 本地想装个图片理解的大模型,看了下blip2感觉比较合适,macos安装的时候有点坑需要注意下,但是最终也无法使用mps加速,比较蛋疼。这里记录下安装步骤。

安装

LAVIS/projects/blip2 at main · salesforce/LAVIS

#直接安装
pip install salesforce-lavis#报错
ERROR: Cannot install salesforce-lavis==1.0.0 and salesforce-lavis==1.0.2 because these package versions have conflicting dependencies.The conflict is caused by:
salesforce-lavis 1.0.2 depends on decord
salesforce-lavis 1.0.0 depends on decordTo fix this you could try to:loosen the range of package versions you've specified
remove package versions to allow pip attempt to solve the dependency conflict#decord无法安装,解决方案如下

Build issues with decord for Mac with Python 3.9+ · Issue #15 · salesforce/LAVIS

#安装ffmeg#install ffmpeg@4 using 
brew install ffmpeg@4
#update the link since I had ffmpeg5 using 
brew link --overwrite ffmpeg@4
#安装decode
#https://github.com/dmlc/decord#mac-osbrew install cmake ffmpeg
#克隆仓库
git clone --recursive https://github.com/dmlc/decord
#进入仓库编译
cd decord
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make
#make出错如下
[ 3%] Building CXX object CMakeFiles/decord.dir/src/audio/audio_interface.cc.o
In file included from /Users/y/Desktop/decord/decord/src/audio/audio_interface.cc:5:
/Users/y/Desktop/decord/decord/src/audio/audio_reader.h:8:10: fatal error: 'vector' file not found
8 | #include <vector>
| ^~~~~~~~
1 error generated.
make[2]: *** [CMakeFiles/decord.dir/src/audio/audio_interface.cc.o] Error 1
make[1]: *** [CMakeFiles/decord.dir/all] Error 2
make: *** [all] Error 2#decord/build/CMakeLists.txt
#加一行下面这个
set(CMAKE_CXX_COMPILER clang++)#成功build git:(master)make
-- Could NOT find PkgConfig (missing: PKG_CONFIG_EXECUTABLE)
-- Found libavdevice, device input will be enabled
-- Found FFMPEG or Libav: /opt/homebrew/lib/libavformat.dylib;/opt/homebrew/lib/libavfilter.dylib;/opt/homebrew/lib/libavcodec.dylib;/opt/homebrew/lib/libavutil.dylib;/opt/homebrew/lib/libswresample.dylib;/opt/homebrew/lib/libavdevice.dylib, /opt/homebrew/include
FFMPEG_INCLUDE_DIR = /opt/homebrew/include
FFMPEG_LIBRARIES = /opt/homebrew/lib/libavformat.dylib;/opt/homebrew/lib/libavfilter.dylib;/opt/homebrew/lib/libavcodec.dylib;/opt/homebrew/lib/libavutil.dylib;/opt/homebrew/lib/libswresample.dylib;/opt/homebrew/lib/libavdevice.dylib
-- CUDA disabled, no nvdec capabilities will be enabled...
-- Configuring done (0.1s)
-- Generating done (0.0s)
-- Build files have been written to: /Users/y/Desktop/decord/decord/build
[  3%] Building CXX object CMakeFiles/decord.dir/src/audio/audio_interface.cc.o
[  7%] Building CXX object CMakeFiles/decord.dir/src/audio/audio_reader.cc.o
[ 11%] Building CXX object CMakeFiles/decord.dir/src/runtime/c_runtime_api.cc.o
[ 14%] Building CXX object CMakeFiles/decord.dir/src/runtime/cpu_device_api.cc.o
[ 18%] Building CXX object CMakeFiles/decord.dir/src/runtime/dso_module.cc.o
[ 22%] Building CXX object CMakeFiles/decord.dir/src/runtime/file_util.cc.o
[ 25%] Building CXX object CMakeFiles/decord.dir/src/runtime/module.cc.o
[ 29%] Building CXX object CMakeFiles/decord.dir/src/runtime/module_util.cc.o
[ 33%] Building CXX object CMakeFiles/decord.dir/src/runtime/ndarray.cc.o
[ 37%] Building CXX object CMakeFiles/decord.dir/src/runtime/registry.cc.o
[ 40%] Building CXX object CMakeFiles/decord.dir/src/runtime/str_util.cc.o
[ 44%] Building CXX object CMakeFiles/decord.dir/src/runtime/system_lib_module.cc.o
[ 48%] Building CXX object CMakeFiles/decord.dir/src/runtime/thread_pool.cc.o
[ 51%] Building CXX object CMakeFiles/decord.dir/src/runtime/threading_backend.cc.o
[ 55%] Building CXX object CMakeFiles/decord.dir/src/runtime/workspace_pool.cc.o
[ 59%] Building CXX object CMakeFiles/decord.dir/src/sampler/random_file_order_sampler.cc.o
[ 62%] Building CXX object CMakeFiles/decord.dir/src/sampler/random_sampler.cc.o
[ 66%] Building CXX object CMakeFiles/decord.dir/src/sampler/sequential_sampler.cc.o
[ 70%] Building CXX object CMakeFiles/decord.dir/src/sampler/smart_random_sampler.cc.o
[ 74%] Building CXX object CMakeFiles/decord.dir/src/video/logging.cc.o
[ 77%] Building CXX object CMakeFiles/decord.dir/src/video/storage_pool.cc.o
[ 81%] Building CXX object CMakeFiles/decord.dir/src/video/video_interface.cc.o
[ 85%] Building CXX object CMakeFiles/decord.dir/src/video/video_loader.cc.o
[ 88%] Building CXX object CMakeFiles/decord.dir/src/video/video_reader.cc.o
[ 92%] Building CXX object CMakeFiles/decord.dir/src/video/ffmpeg/filter_graph.cc.o
[ 96%] Building CXX object CMakeFiles/decord.dir/src/video/ffmpeg/threaded_decoder.cc.o
[100%] Linking CXX shared library libdecord.dylib
[100%] Built target decord
#安装到自己python库#回到docord下的python目录
cd ../python
# option 1: add python path to $PYTHONPATH, you will need to install numpy separately
pwd=$PWD
echo "PYTHONPATH=$PYTHONPATH:$pwd" >> ~/.bash_profile
source ~/.bash_profile
# option 2: install with setuptools
python3 setup.py install --user
#再次安装lavis,安装成功!
pip install salesforce-lavis

测试代码

from PIL import Image
import requests
from transformers import Blip2Processor, Blip2ForConditionalGeneration
import torch#强制指定mps
device = "mps"processor = Blip2Processor.from_pretrained("Salesforce/blip2-opt-2.7b")
model = Blip2ForConditionalGeneration.from_pretrained("Salesforce/blip2-opt-2.7b", torch_dtype=torch.float16
)
model.to(device)
url = "http://images.cocodataset.org/val2017/000000039769.jpg"
image = Image.open(requests.get(url, stream=True).raw)inputs = processor(images=image, return_tensors="pt").to(device, torch.float16)generated_ids = model.generate(**inputs)
generated_text = processor.batch_decode(generated_ids, skip_special_tokens=True)[0].strip()
print(generated_text)
#第一次运行可能要等很久,因为要下载模型,最好网络加个魔法#运行上面demo报错
Loading checkpoint shards: 100%|██████████| 2/2 [00:12<00:00,  6.36s/it]
Traceback (most recent call last):generated_ids = model.generate(**inputs)return func(*args, **kwargs)outputs = self.language_model.generate(return func(*args, **kwargs)result = self._greedy_search(unfinished_sequences = unfinished_sequences & ~stopping_criteria(input_ids, scores)is_done = is_done | criteria(input_ids, scores, **kwargs)is_done = torch.isin(input_ids[:, -1], self.eos_token_id.to(input_ids.device))
NotImplementedError: The operator 'aten::isin.Tensor_Tensor_out' is not currently implemented for the MPS device. If you want this op to be added in priority during the prototype phase of this feature, please comment on https://github.com/pytorch/pytorch/issues/77764. As a temporary fix, you can set the environment variable `PYTORCH_ENABLE_MPS_FALLBACK=1` to use the CPU as a fallback for this op. WARNING: this will be slower than running natively on MPS.#强制指定环境变量如下
PYTORCH_ENABLE_MPS_FALLBACK=1

请添加图片描述

#最后输出
two cats laying on a couch

总结

  • 其实效果一般,可能我用的float16
  • 最主要就是安装decode
  • decode的cmake有点麻烦
  • 最后执行的时候,下载模型要卡很久,这里看网速就知道其实正在下载

写到最后

请添加图片描述

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

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

相关文章

【研发日记】Matlab/Simulink技能解锁(十二)——Stateflow中的两种状态机嵌套对比

文章目录 前言 项目背景 两级状态机 函数状态机 分析和应用 总结 参考资料 前言 见《【研发日记】Matlab/Simulink技能解锁(七)——两种复数移相算法》 见《【研发日记】Matlab/Simulink技能解锁(八)——分布式仿真》 见《【研发日记】Matlab/Simulink技能解锁(九)——基…

数据结构(其四)--特殊矩阵的存储

目录 11.特殊矩阵的压缩存储 &#xff08;1&#xff09;.一维数组的储存结构 &#xff08;2&#xff09;.二维数组的存储结构 &#xff08;3&#xff09;.普通矩阵的存储 &#xff08;4&#xff09;.特殊矩阵的压缩存储 i.对称矩阵 ii.三角矩阵 iii.三对角矩阵 iiii.稀疏矩…

Java多商户新零售超市外卖商品系统

解锁新零售奥秘&#xff0c;多商户外卖超市商品系统大揭秘&#xff01; &#x1f31f; 开篇&#xff1a;新零售时代的浪潮 在这个日新月异的数字化时代&#xff0c;新零售已悄然成为商业变革的新风口。想象一下&#xff0c;足不出户就能逛遍全城商家&#xff0c;心仪商品一键…

力扣——238.移动零

题目 思路 利用双指针&#xff0c;先找到第一个为0的地方指向&#xff0c;指针2指向下一个&#xff0c;指针1之前是已经处理好的数据&#xff0c;指针2进行遍历&#xff0c;遇到非零则与指针1数据交换&#xff0c;然后指针1。 代码 class Solution { public:void moveZeroes(…

离心机转子适配器容量转换器的作用

离心机转子是离心机的核心部件&#xff0c;离心机中的所有系统都配置为保证转子在一定条件下安全运行。转子不仅直接影响分离效果&#xff0c;而且也是离心机技术中的主要承力部件&#xff0c;对离心机的安全性极为重要。 简而言之&#xff0c;离心机可分为两部分&#xff1a;…

Java Web——第二天

什么是JavaScript? JavaScript(简称:JS) 是一门跨平台、面向对象的脚本语言。是用来控制网页行为的&#xff0c;它能使网页可交互 JavaScript和Java是完全不同的语言&#xff0c;不论是概念还是设计。但是基础语法类似 JavaScript在1995年由 Brendan Eich 发明&#xff0c;…

【MySQL】索引概念解析

1.什么是索引&#xff1f; MySQL中的索引是一种数据结构&#xff0c;用于帮助MySQL数据库管理系统快速查询数据。索引的主要目的是提高数据检索的速度&#xff0c;减少数据库系统需要扫描的数据量。 优点&#xff1a; 索引可以极大的提高数据检索效率&#xff0c;降低数据库…

C语言——预处理和指针

C语言——预处理和指针 预处理宏宏定义宏的作用域带参的宏 文件包含条件编译 指针指针的概念指针的定义 预处理 编程的流程分为&#xff1a;编辑、编译、运行、调试四个阶段&#xff1b; 预处理属于编译阶段&#xff0c;编译过程又可以分为&#xff1a;预处理、编译、汇编、链…

TikTok达人效应:品牌出海中的文化桥梁与本土化策略

在全球化的浪潮下&#xff0c;品牌出海已成为企业拓展市场的必经之路。然而&#xff0c;跨越文化差异、实现品牌本土化传播一直是企业面临的巨大挑战。TikTok作为一款全球流行的短视频平台&#xff0c;其庞大的用户基础和强大的影响力&#xff0c;为品牌出海提供了新的机遇。在…

大数据技术复习--大数据与云计算、物联网、人工智能

云计算 ** 概念&#xff1a;美国国家标准技术研究院“一种无处不在的、便捷的且按需的对一个共享的可配置的计算资源&#xff08;如网络&#xff0c;服务器、存储、应用和服务&#xff09;进行网络访问的模式&#xff0c;他能够通过少量的管理或服务供应商的互动实现计算资源的…

CTFHub技能树web——XSS——DOM反射

根据框里的内容 直接右键查看网页源代码 看到 了其闭合方式 然后去网页测试一下alert&#xff08;1&#xff09;反射 ;</script><script>alert(1)</script> 看到 确实存在 去xssaq.cn 创建一个项目 把src粘过来 在第一个输入框中 再将返回回来的url 复…

MATLAB计算心理声学烦恼度例子

在这个例子中&#xff0c;您测量发动机噪音&#xff0c;并使用心理声学指标来模拟其感知响度、尖锐度、波动强度、粗糙度和总体烦扰程度。然后&#xff0c;模拟添加隔音材料&#xff0c;重新计算总体噪音水平。最后&#xff0c;比较恼人程度&#xff0c;并显示应用隔音材料后的…

【LabVIEW学习篇 - 12】:通知器

文章目录 通知器案例一案例二案例三&#xff08;在不同VI中用同一个通知器&#xff09; 通知器 同步技术&#xff1a;同步技术用来解决多个并行任务之间的同步或通信问题。 通知器比较适合一对多的操作&#xff0c;类似于广播&#xff0c;一点发出的通知消息&#xff0c; 其它…

Spring Boot 3.3 新特性介绍

1. 引言 Spring Boot 3.1.x 停止维护了&#xff0c;而 3.3.x 作为最新发布的版本&#xff0c;带来了许多新特性和改进。本篇文章将详细介绍这些新特性&#xff0c;并通过样例代码加以解释&#xff0c;帮助开发者更好地掌握和应用这些新功能。 Spring Boot 3.3现已正式发布&…

Android studio配置代码模版

一、背景&#xff1a; 在工作中&#xff0c;总是要写一些重复的代码&#xff0c;特别是项目有相关规范时&#xff0c;就会产生很多模版代码&#xff0c;每次要么复制一份&#xff0c;要么重新写一份新的&#xff0c;很麻烦&#xff0c;于是我就在想&#xff0c;能不能像创建一…

小程序开发入门:第一天的学习和实践指南

目录 一. 理解小程序的基本概念 1. 无需安装 2. 快速启动 3. 界面简洁 4. 独立性和封闭性 5. 数据安全 6. 框架结构 7. 生命周期 8. 全局配置 9. API支持 10. 发布和更新 二、选择合适的开发工具 1. 微信开发者工具 2. Visual Studio Code 3. Sublime Text 4. …

Tensor安装和测试

1: 打开git官方 https://github.com/NVIDIA/TensorRT 2: 下载得到&#xff1a;TensorRT-10.2.0.19.Linux.x86_64-gnu.cuda-11.8.tar.gz 3: 下载后配置环境变量&#xff0c;上面地址记得改成真实地址。 4: 如果想python使用tensorrt&#xff0c;那么 解压后目录&#xff0c…

【HTML入门】第二十三课 - 【实战】做一个简单的图书详情页

这一节&#xff0c;我们继续用纯HTML来做一个实战小案例。 我找了一个图书详情的页面&#xff0c;就像这样&#xff1a; 这一小节&#xff0c;我们用纯HTML标签&#xff0c;来实现一下这个图书详情的内容。 目录 1 布局分析 2 用到的标签 3 实战代码 1 布局分析 我们看这张…

吴恩达机器学习-C1W3L2-逻辑回归之S型函数

可选实验:逻辑回归 在这个不评分的实验中&#xff0c;你会 探索sigmoid函数(也称为logistic函数)探索逻辑回归;哪个用到了s型函数 import numpy as np %matplotlib widget import matplotlib.pyplot as plt from plt_one_addpt_onclick import plt_one_addpt_onclick from l…

Flutter 插件之http(介绍、使用、二次封装)

背景 在我们日常开发过程中,经常会使用到网络请求,而在Flutter插件中,最常用的请求插件一共两个,分别是: 1、dio 2、http 其中dio我已经做过详细介绍了(post、get等请求、文件上传、请求重试等),这里就不做过多阐述,下面附上文章链接,如有需要可前往查看。 http…