• 使用纯c#在本地部署多模态模型,让本地模型也可以理解图像


    之前曾经分享过纯c#运行开源本地大模型Mixtral-8x7B 当时使用的是llamasharp这个库和Mixtral的模型在本地部署和推理,前段时间我看到llamasharp更新到了0.11.1版本,可以支持今年2月份开源的

    llava-v1.6多模态大模型了,本着尝试一下的想法,就做了集成,不过中途也是踩了一些坑,好在模型还是跑起来了。

    先展示一下模型的图形理解结果吧:

     可以看到模型对图像还是有一些基本的理解能力,但是受限于模型的尺寸(7B),智能确实有限。而且基于目前的CPU推理确实速度感人。有感兴趣的小伙伴可以使用CUDA版本进行测试

    修改办法是双击csproj,修改为LLamaSharp.Backend.Cuda12 or LLamaSharp.Backend.Cuda11 (根据你的N卡环境的CUDA确定安装哪一个版本即可)

    接下来大概看看多模态部分的源代码实现,其实也比较简单:

    多模态模型的实现原理是使用clip模型对图像到文本的映射生成对应的embedding,这一步和词嵌入类似,只不过这里是clip模型将图像转化成了另外一种形式的嵌入,然后输入多模态模型来进行图像推理

    所以多模态模型我们需要下载两个模型,一个用于图像CLIP嵌入,一个同于多模态推理:

    //多模态模型:llava-v1.6-mistral-7b.Q4_K_M.gguf 下载地址:https://huggingface.co/mradermacher/llava-v1.6-mistral-7b-GGUF/resolve/main/llava-v1.6-mistral-7b.Q4_K_M.gguf
    //CLIP模型:mmproj-mistral7b-f16-q6_k.gguf 下载地址:https://huggingface.co/cmp-nct/llava-1.6-gguf/resolve/main/mmproj-mistral7b-f16-q6_k.gguf?download=true

    接着我们通过创建llamasharp上下文,就可以愉快的进行推理任务了,核心代码如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    var param = new ModelParams(modelPath)
    {
        ContextSize = 4096
    };
    var ex = new InteractiveExecutor(LLamaWeights.LoadFromFile(param).CreateContext(param), LLavaWeights.LoadFromFile(mmpmodelPath));
    ex.ImagePaths.Add("yourimgpath.png");//注意只能是jpeg图片的本地路径
    await foreach (var item in ex.InferAsync("\nUser:请理解图像中的内容\nAssistant:"))
    {
        Console.WriteLine(item);
    }

      这里modelPath是你的多模态模型的本地加载地址,mmpmodelPath是CLIP模型的地址,都是相对路径。主要的坑过就是一开始我以为不需要加载CLIP模型,所以下载了llava就测试,结果模型要吗说没有找到图片要吗就乱说一通,

    后来去llamasharp翻了一下案例才发现少了一个模型,第二个坑就是InferAsync这里输入内容时,如果要进行图像推理,必须要前置一个的标签,否则模型会直接忽略你的图像,进行单纯的文本推理回答。

    今天分享的内容都比较简单,项目也都更新到了git上,欢迎有兴趣的小伙伴下载+star:https://github.com/sd797994/LocalChatForLlama

    补充一下:使用英文测试发现效果要稍微好一点,如图:

     

  • 相关阅读:
    linux( CentOs)对mysql基本操作和密码修改
    【深度学习前沿应用】文本分类Fine-Tunning
    手机界面设计中12种常用布局 优漫动游
    复制构造函数
    qt学习之旅--MinGW32编译opencv3.0.0
    WEB3 solidity 带着大家编写测试代码 操作订单 创建/取消/填充操作
    【CIO人物展】国家能源集团信息技术主管王爱军:中国企业数智化转型升级的内在驱动力...
    JavaEE之HTTP协议 Ⅱ
    HDMI接口类型种类区分图(高清图)
    运行程序时msvcr110.dll丢失的解决方法,msvcr110.dll丢失5的个详细解决方法
  • 原文地址:https://www.cnblogs.com/gmmy/p/18146496