【论文浅尝】Porting Large Language Models to Mobile Devices for Question Answering

Introduction

移动设备上的大型语言模型(LLM)增强了自然语言处理,并支持更直观的交互。这些模型支持高级虚拟助理、语言翻译、文本摘要或文本中关键术语的提取(命名实体提取)等应用。

LLMs的一个重要用例也是问答,它可以为大量的用户查询提供准确的和上下文相关的答案。由于典型智能手机的处理能力有限,当前移动设备上的LLM查询在云中处理,LLM输出被发送回设备。这是ChatGPT应用程序和大多数其他LLM支持的聊天应用程序的标准工作流程。

但是有些情况是不可取的,例如,对于在连接有限或互联网流量受到严格监控和监视的地区工作的记者而言(例如在专制政权中)。在这种情况下,处理必须在设备上完成。

因此,在这项工作中,我们演示了如何将LLM高效地移植到移动设备上,以便它们可以在移动设备上以交互速度本地运行。

 LLM framework for on-device inference

        最初,我们试图通过tensorflow Lite(TF Lite)框架在移动设备上本地进行LLM推理,因为它是最流行的on device推理框架。但是对于LLM来说,Hugging Face模型上可用的几乎所有微调模型都只提供PyTorch权重,因此必须转换为TFLite。结果发现比较困难。

        因此,我们选择了llama.cpp framework ,这是一个非常灵活且自包含的C++框架,用于在各种设备上进行LLM推断。它可以在CPU或GPU/CUDA上运行最先进的模型,如Llama/Llama 2、Vicuna或Mistral,并提供大量选项(例如设置温度、上下文大小或采样方法)。它支持各种低于8位的量化方法(每个参数从2位到6位),这对于在内存有限的智能手机上运行具有数十亿参数的模型至关重要。

        为了构建llama.cpp框架的C++库和可执行文件,需要一个标准的Linux构建工具链,包括终端(shell)、命令行工具、CMake/Make、C/C++编译器和链接器等等。对于Android,幸运的是,通过Termux app 可以获得这样的构建工具链。它可以通过Android开源软件包管理器F-Droid 安装,不需要root访问设备。

安装Termux后,我们在那里打开一个控制台,并通过Termux软件包管理器pkg安装必要的工具(如wget、git、cmake、clang编译器)。我们还在PC上安装了Android屏幕镜像软件scrcpy,这样我们就可以直接在PC上控制设备并镜像其屏幕。

为了构建llama.cpp二进制文件,我们现在从各自的github repo中克隆其最新源代码。我们调用CMake生成Makefile并通过Make命令构建所有二进制文件。我们通过在CPU上进行模型推理来编译二进制文件。

Model selection and prompt format 

在Hugging Face model hub上,有许多预训练的大型语言模型可用,这些模型在网络架构、模型大小、训练/微调过程以及数据集和任务方面各不相同。

经过一些实验,我们选择了具有30亿个参数的Orca-Mini-3B模型。它在最近的智能手机上以交互速度运行,并通过Orca方法的模仿学习进行微调,从而对用户查询提供体面的响应。我们采用一个量化模型,每个参数约为5.6位,在器件上大约占用2.2 GB的CPU RAM

提示格式如下例所示:

Experiments and evaluation  

我们对所选模型进行了主观评估,测试了该模型对与政治、地理、历史等不同主题相关的用户查询的响应。从测试中我们可以推断出该模型为大多数用户查询提供了准确而忠实的答案。当然,像每个LLM一样,它有时会产生幻觉(提供错误信息)。下图1显示了用于直接聊天的LLM应用程序的输出示例。LLM为来自不同领域的问题提供正确答案。

该模型的输出生成速度足以在三星Galaxy S21智能手机上进行互动聊天。

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 热题 100 题解:二叉树部分(1 ~ 5)

题目一:二叉树的中序遍历(No. 948) 94. 二叉树的中序遍历 - 力扣(LeetCode) 题目难度:简单 给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。 示例 1: 输入:roo…

【Django】初识Django快速上手

Django简介 Django是一个高级的、开源的Python Web框架,旨在快速、高效地开发高质量的Web应用程序 https://developer.mozilla.org/zh-CN/docs/Learn/Server-side/Django/Introduction 安装Django pip install Django如果要知道安装的Django的版本,可…

关于两步到位Chrome永久停止更新

全程就两个步骤!!敲重点!!! 好使记得点赞关注我! 1.找到Chrome包下的hosts文件 默认路径大概是 C:\Windows\System32\drivers\etc\hosts ,不记得了可以通过Everything查找 在hosts 文件中 …

移动端日志采集与分析最佳实践

前言 做为一名移动端开发者,深刻体会日志采集对工程师来说具有重要意义,遇到问题除了 debug 调试就是看日志了,通过看日志可以帮助我们了解应用程序运行状况、优化用户体验、保障数据安全依据,本文将介绍日志采集的重要性、移动端…

开源博客项目Blog .NET Core源码学习(19:App.Hosting项目结构分析-7)

本文学习并分析App.Hosting项目中后台管理页面的主页面。如下图所示,开源博客项目的后台主页面采用layui预设类layui-icon-shrink-right设置样式,点击主页面中的菜单,其它页面采用弹框或者子页面形式显示在主页面的内容区域。   后台主页面…

JavaScript算法描述【排序与搜索】六大经典排序|合并两个有序数组|第一个错误的版本

🐧主页详情:Choice~的个人主页 📢作者简介:🏅物联网领域创作者🏅 and 🏅阿里专家博主🏅 and 🏅华为云享专家🏅 ✍️人生格言:最慢的步伐不是跬步&…

C++ 笔试练习笔记【1】:字符串中找出连续最长的数字串 OR59

文章目录 OR59 字符串中找出连续最长的数字串题目思路分析实现代码 注:本次练习题目出自牛客网 OR59 字符串中找出连续最长的数字串 题目思路分析 首先想到的是用双指针模拟,进行检索比较输出 以示例1为例: 1.首先i遍历str直到遍历到数字&a…

unity 专项一 localPosition与anchoredPosition(3D)的区别

一 、RectTransform 概念 1、RectTransform继承自Transform,用于描述矩形的坐标(Position),尺寸(Size),锚点(anchor)和中心点(pivot)等信息,每个2D布局下的元素都会自动生成该组件。 2、当我们在处理UI组件时,往往容易…

【微信小程序调用百度API实现图像识别实战】-前后端加强版

前言:基于前面两篇图像识别项目实战文章进行了改造升级。 第一篇 入门【微信小程序调用百度API实现图像识别功能】----项目实战 第二篇 前后端结合 【微信小程序调用百度API实现图像识别实战】----前后端分离 这一篇主要讲述的是在第二篇的基础上新增意见反馈功能&a…

ZooKeeper 搭建详细步骤之一(单机模式)

搭建模式简述 ZooKeeper 的搭建模式包括单机模式、集群模式和伪集群模式,分别适用于不同的场景和需求,从简单的单节点测试环境到复杂的多节点高可用生产环境。在实际部署时,应根据系统的可用性要求、数据量、并发负载等因素选择合适的部署模式…

mysql UNION 联合查询

mysql UNION 联合查询 业务需要拉数据,这里需要对查询不同格式的数据进行组装,此处采用联合查询 注意1:null as 设备关爱 ,结果为null,表头为设备关爱 注意2: UNION 或者 UNION ALL 联合查询自行选用 注意3…

新开的拼多多店铺怎么运营

今天给大家分享一下如何在拼多多平台上开设并运营一家店铺。不管你是创业者还是小型商家,相信这个话题都会对你有所帮助。 拼多多新店需要做些推广提高店铺权重 新店用3an推客做推广比较好 3an推客是给商家提供的营销工具,3an推客CPS推广模式由商家自主…

Int4:Lucene 中的更多标量量化

作者:来自 Elastic Benjamin Trent, Thomas Veasey 在 Lucene 中引入 Int4 量化 在之前的博客中,我们全面介绍了 Lucene 中标量量化的实现。 我们还探索了两种具体的量化优化。 现在我们遇到了一个问题:int4 量化在 Lucene 中是如何工作的以…

(七)Servlet教程——Idea编辑器集成Tomcat

1. 点击桌面上Idea快捷方式打开Idea编辑器,假如没有创建项目的话打开Idea编辑器后的界面展示如下图所示 2. 点击界面左侧菜单中的自定义 3. 然后点击界面中的“所有设置...”,然后点击“构建、执行、部署”,选择其中的“应用程序服务器” 4. 点击“”按钮…

每日OJ题_DFS回溯剪枝⑦_力扣77. 组合

目录 力扣77. 组合 解析代码 力扣77. 组合 77. 组合 难度 中等 给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 示例 1: 输入:n 4, k 2 输出: [[2,4],[3,4],[2,3],[1,…

数据结构与算法(Java版) | 详解十大经典排序算法之一:插入排序

接下来,我来给大家讲解第三种排序算法,即插入排序。 基本介绍 首先,我们来看下插入排序的基本介绍。 插入排序,其属内部排序法,是对于欲排序的元素以插入的方式来找寻该元素的适当位置,以便最终达到排序…

基于Springboot的考研资讯平台

基于SpringbootVue的考研资讯平台的设计与实现 开发语言:Java数据库:MySQL技术:SpringbootMybatis工具:IDEA、Maven、Navicat 系统展示 用户登录 首页 考研资讯 报考指南 资料信息 论坛信息 后台登录 考研资讯管理 学生管理 资…

Python数据分析实验二:Python数据预处理

目录 一、实验目的与要求二、实验任务三、主要程序清单和运行结果(一)对chipotle.csv文件的销售数据进行分析(二)对描述泰坦尼克号成员的信息进行可视化和相关分析 四、实验体会 一、实验目的与要求 1、目的:   掌握…

分布式与一致性协议之Paxos算法(二)

Paxos算法 如何达成共识 想象这样一个场景,某地出现突发事件,当地村委会、负责人等在积极研究和搜集解决该事件的解决方案,你也决定参与其中,提交提案,建议一些解决方法。为了和其他村民的提案做区分,你的…

eclipse 如何创建python文件

一、准备 1.平台要求: 电脑除了要安装eclipse软件和Python语言包之外,还需要将Python集成到eclipse软件中,网上有很多的方法,这里就不细细介绍如何集成了。 在下面界面中可以看到自己已经安装了继承插件。具体方法见步骤2&…