- Java锁的逻辑(结合对象头和ObjectMonitor)
- 还在用饼状图?来瞧瞧这些炫酷的百分比可视化新图形(附代码实现)⛵
- 自动注册实体类到EntityFrameworkCore上下文,并适配ABP及ABPVNext
- 基于Sklearn机器学习代码实战
看了那么多chatGPT的文章,作为一名不精通算法的开发,也对大模型心痒痒。但想要部署自己的大模型,且不说没有算法相关的经验了,光是大模型占用的算力资源,手头的个人电脑其实也很难独立部署。就算使用算法压缩后的大模型,部署在个人电脑上,还要忍受极端缓慢的计算速度以及与chatGPT相差甚远的模型效果.
有什么办法能够部署属于我们自己的大模型呢?其实很简单,我们将目标拆解一下:
随着chatGPT的火爆,许多开源爱好者涌入AI领域,将许多与大型模型相关的工具进行进一步封装,使得我们这些AI初学者也能够用很少的工作量搭建一个私有大型语言模型。而且,有许多成熟的工具可供我们使用,可以帮助我们进一步使用和微调大型模型.
因此,本文是为AI初学者们(包括我自己)编写的保姆级大型模型部署和使用指南。现在正值阿里云免费试用计划,我们可以不花一分钱就可以体验部署自己的大型模型的乐趣.
下图便是我通过阿里云免费申请的PAI平台资源(显卡是Nvidia V100),部署的清华大学chatGLM对话大模型,在网页端和手机端都能直接体验:
电脑端 。
手机端 。
下文围绕如何手把手搭建一个大模型Demo展开,文章主要目录:
免费试用活动页 。
https://free.aliyun.com/ 。
只要没有申请过PAI-DSW资源的新老用户皆可申请5000CU的免费额度,3个月内使用.
至于5000CU能用多久,和实际申请实例的性能相关,在下面会讲解.
官方有PAI-DSW使用教程,教你如何用领取的免费资源搭建一个Stable Diffusion来做AI画图,如果对SD感兴趣,可以按照官方教程实践.
https://help.aliyun.com/document_detail/615220.html 。
我们领取额度后,秒到账。之后在阿里云页面内搜索PAI平台,点击立即开通,开通PAI控制台.
开通时的页面没有截图,其中有一些可选的开通项,比如NAS,比如网关等,可以按照自己需求选取, 比如希望保存自己的模型 ,那可以关联NAS资源。我当时没有选其他资源,仅开通了PAI,这样没有额外的收费.
随后进入控制台,创建DSW实例.
这里选取资源,注意选择GPU资源,并选择支持资源包抵扣的资源。比如下图的ecs.gn6v-c8g1.2xlarg。可以看到他们的价格里,写明了每小时消耗的CU,你可以大致计算一下,5000CU可以用多久,ecs.gn6v-c8g1.2xlarg这个型号可以跑333小时,大概连续13天.
系统可以任意选择,本文为了部署chatGLM,选择pytorch1.12 。
当然,中间你可以 随时停止机器,就不会继续扣费 。注意,这里的机器,是只有系统盘的,如果停止了机器,挂载的系统盘会被回收,你在上面下载的各种文件,模型,都会回收掉。你重新启动,是新的系统盘,文件需要重新下载。(别问我怎么知道的- -!) 。
创建完成后,点击打开,就进入了交互式的Web页面,可以开始你的模型开发之旅.
上面已经讲完了资源的申请和实例的创建、使用,之后小伙伴们可以自行发挥,部署自己的大模型(或者任何AI相关资源)。本文后半部分介绍一下我自己折腾部署ChatGLM对话大模型的过程,给完全不了解大模型的小伙伴打个样.
ChatGLM代码仓库:
https://github.com/THUDM/ChatGLM-6B 。
大家完全可以按照官方文档自行部署,忽略我下面的教程。也可以按照我下方的流程来操作,避免再把我踩得坑再踩一遍.
由于模型较大(13G左右),我们最好先把模型拉到本地,再运行.
当然,如果你也可以不下载离线模型,直接在运行时拉取模型文件.
模型文件仓库:
https://huggingface.co/THUDM/chatglm-6b 。
下载模型仓库,需要安装Git LFS(Large File Storage),它用来拉去Git仓库中的大型文件,比如这次用到的模型bin文件.
由于我们申请的系统正好是Ubuntu,在Ubuntu下安装Git LFS,可以使用如下命令:
sudo apt-get update 。
sudo apt-get install git-lfs 。
完成后,克隆模型仓库:
git clone https://huggingface.co/THUDM/chatglm-6b 。
有可能网络波动,会导致拉取卡住,可以手动停止掉,然后进入文件夹内:
git lfs pull 。
这样会拉取到上图红框中LFS文件.
完成模型下载后,我们下载模型运行代码:
git clone https://github.com/THUDM/ChatGLM-6B.git 。
进入文件夹,创建python的虚拟环境:
virtualenv -p /usr/bin/python3.8 venv 。
激活Python虚拟环境:
source venv/bin/activate 。
如果遇到如下的报错,需要额外安装一下python3-dev:
Could not build wheels for pycocotools, which is required to install pyproject.toml-based projects 。
error: command '/usr/bin/x86_64-linux-gnu-gcc' failed with exit code 1 。
sudo apt-get install python3-dev 。
由于我们本地提前下载好了模型,我们修改一下代码,使用本地模型的路径.
将使用到的代码中,路径都从THUDM/chatglm-6b改为你的路径,比如我们的模型下载在/mnt/workspace/chatglm-6b,我们将两种部署模型的主代码文件都修改一下,都修改为如下图所示的路径:
我们直接用官方提供的网页版Demo来跑模型,启动web_demo.py,开始模型部署,首先会将模型读入内存,占用约13个G.
完成后,内存会被释放,开始占用GPU显存13g.
最终,部署完成会得到服务公网和本地网址.
回答还是比较快的,在我们V100显卡的机器上,提问后1-2秒内就会开始回答问题.
以下是一个完整的对话:
我:写一个Java单例模式代码 。
ChatGLM:以下是一个简单的Java单例模式代码示例:
public class Singleton {
private static final Singleton INSTANCE = new Singleton();
private Singleton() {}
public static Singleton getInstance() {
return INSTANCE;
}
}
在这个示例中,Singleton 类是一个静态类,它有一个静态成员变量 INSTANCE,它初始化为一个单例对象。getInstance 方法返回这个单例对象的实例,可以像任何其他方法一样使用。 单例对象通常被用于确保一个类只有一个实例,并提供全局访问点。使用 getInstance 方法可以方便地获取单例对象,而无需担心多个线程同时访问同一个对象。 需要注意的是,在实际应用中,单例对象应该尽量避免被频繁创建和销毁,因为这样会增加内存开销和维护成本。因此,可以考虑使用懒加载(lazy loading)的方式来避免频繁创建单例对象.
我:可以换一个方式实现吗,比如懒汉式?
ChatGLM:当然可以,懒汉式单例模式的具体实现方式如下:
public interface Singleton {
static Singleton INSTANCE;
}
public class ConcreteSingleton implements Singleton {
private static Singleton INSTANCE = new ConcreteSingleton();
@Override
public Singleton getInstance() {
return INSTANCE;
}
}
public class LazySingleton implements Singleton {
private static Singleton INSTANCE;
private Singleton() {}
public static Singleton getInstance() {
synchronized (LazySingleton.class) {
return INSTANCE;
}
}
}
在这个示例中,ConcreteSingleton 类使用 getInstance 方法来创建单例对象,并使用 synchronized 关键字实现线程安全。LazySingleton 类使用 synchronized 关键字实现懒加载,只有在需要时才创建单例对象。 需要注意的是,懒汉式单例模式仍然需要保证线程安全,因此在使用懒加载时,需要考虑线程安全问题。此外,懒汉式单例模式可能无法充分利用类的空间,因为它需要使用共享对象来实现懒加载,因此需要考虑如何提高类的性能和空间利用率.
免费的5000CU额度是有三个月时效的,超过三个月会直接过期。想要做到心中有数,防止超过免费额度导致扣费。我们可以查看免费额度的用量。在页面右上角有“费用”标签,选择“资源实例管理”,点击“资源包”,能看到你的免费资源包的用量.
点击每行中的统计,可以看到是哪个实例在消耗CU.
整个部署流程,我自己折腾下来也只花了半天时间,就能够搭建好一个完整、可用的Demo.
不得不说,当AI逐渐破圈,成为一个风口时,真的是猪都会飞,普通程序员上手AI的难度瞬间被拉低了一个数量级。开源开发者的不断贡献让各种工具和文档变得更容易上手。每天数以万计的大模型相关issue和pr,让Github遇到了久违的繁荣.
在AI席卷全球的这一刻,作为一名程序员,我们无疑是对这个时代更有体感的那群人。此时此刻,非我莫属。要充分关注AI技术的应用场景和发展趋势,积极探索AI与其他领域的结合,为自己的职业发展和未来规划提供更多的可能性.
最后此篇关于如何真正“不花一分钱”部署一个属于你的大模型的文章就讲到这里了,如果你想了解更多关于如何真正“不花一分钱”部署一个属于你的大模型的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
可不可以命名为MVVM模型?因为View通过查看模型数据。 View 是否应该只与 ViewModelData 交互?我确实在某处读到正确的 MVVM 模型应该在 ViewModel 而不是 Mode
我正在阅读有关设计模式的文章,虽然作者们都认为观察者模式很酷,但在设计方面,每个人都在谈论 MVC。 我有点困惑,MVC 图不是循环的,代码流具有闭合拓扑不是很自然吗?为什么没有人谈论这种模式: mo
我正在开发一个 Sticky Notes 项目并在 WPF 中做 UI,显然将 MVVM 作为我的架构设计选择。我正在重新考虑我的模型、 View 和 View 模型应该是什么。 我有一个名为 Not
不要混淆:How can I convert List to Hashtable in C#? 我有一个模型列表,我想将它们组织成一个哈希表,以枚举作为键,模型列表(具有枚举的值)作为值。 publi
我只是花了一些时间阅读这些术语(我不经常使用它们,因为我们没有任何 MVC 应用程序,我通常只说“模型”),但我觉得根据上下文,这些意味着不同的东西: 实体 这很简单,它是数据库中的一行: 2) In
我想知道你们中是否有人知道一些很好的教程来解释大型应用程序的 MVVM。我发现关于 MVVM 的每个教程都只是基础知识解释(如何实现模型、 View 模型和 View ),但我对在应用程序页面之间传递
我想realm.delete() 我的 Realm 中除了一个模型之外的所有模型。有什么办法可以不列出所有这些吗? 也许是一种遍历 Realm 中当前存在的所有类型的方法? 最佳答案 您可以从您的 R
我正在尝试使用 alias 指令模拟一个 Eloquent 模型,如下所示: $transporter = \Mockery::mock('alias:' . Transporter::class)
我正在使用 stargazer 创建我的 plm 汇总表。 library(plm) library(pglm) data("Unions", package = "pglm") anb1 <- pl
我读了几篇与 ASP.NET 分层架构相关的文章和问题,但是读得太多后我有点困惑。 UI 层是在 ASP.NET MVC 中开发的,对于数据访问,我在项目中使用 EF。 我想通过一个例子来描述我的问题
我收到此消息错误: Inceptionv3.mlmodel: unable to read document 我下载了最新版本的 xcode。 9.4 版测试版 (9Q1004a) 最佳答案 您没有
(同样,一个 MVC 验证问题。我知道,我知道......) 我想使用 AutoMapper ( http://automapper.codeplex.com/ ) 来验证我的创建 View 中不在我
需要澄清一件事,现在我正在处理一个流程,其中我有两个 View 模型,一个依赖于另一个 View 模型,为了处理这件事,我尝试在我的基本 Activity 中注入(inject)两个 View 模型,
如果 WPF MVVM 应该没有代码,为什么在使用 ICommand 时,是否需要在 Window.xaml.cs 代码中实例化 DataContext 属性?我已经并排观看并关注了 YouTube
当我第一次听说 ASP.NET MVC 时,我认为这意味着应用程序由三个部分组成:模型、 View 和 Controller 。 然后我读到 NerdDinner并学习了存储库和 View 模型的方法
Platform : ubuntu 16.04 Python version: 3.5.2 mmdnn version : 0.2.5 Source framework with version :
我正在学习本教程:https://www.raywenderlich.com/160728/object-oriented-programming-swift ...并尝试对代码进行一些个人调整,看看
我正试图围绕 AngularJS。我很喜欢它,但一个核心概念似乎在逃避我——模型在哪里? 例如,如果我有一个显示多个交易列表的应用程序。一个列表向服务器查询匹配某些条件的分页事务集,另一个列表使用不同
我在为某个应用程序找出最佳方法时遇到了麻烦。我不太习惯取代旧 TLA(三层架构)的新架构,所以这就是我的来源。 在为我的应用程序(POCO 类,对吧??)设计模型和 DAL 时,我有以下疑问: 我的模
我有两个模型:Person 和 Department。每个人可以在一个部门工作。部门可以由多人管理。我不确定如何在 Django 模型中构建这种关系。 这是我不成功的尝试之一 [models.py]:
我是一名优秀的程序员,十分优秀!