本文正在参加「金石方案」

前言

看了那么多chatGPT的文章,作为一名不精通算法的开发,也对大模型心痒痒。但想要布置自己的大模型,且不说没有算法相关的经验了,光是大模型占用的算力资源,手头的个人电脑其实也很难独立布置。就算运用算法压缩后的大模型,布置在个人电脑上,还要忍耐极点缓慢的计算速度以及与chatGPT相差甚远的模型作用。

有什么办法能够布置属于咱们自己的大模型呢?其实很简单,咱们将方针拆解一下:

  • 有编程基础:作为一个合格的程序员,这应该是必备本质。
  • 有满足的算力资源:专业GPU自己买不起怎么办,阿里云最近推出了”飞天“免费试用方案,AI模型练习,GPU资源免费用!
  • 要懂大模型:真的要精通大模型吗?不需求。假如只是简单的模型布置和运用,现在的开源模型布置已经十分简单化,只需求掌握基础的Python常识就能够。

跟着chatGPT的火爆,许多开源爱好者涌入AI范畴,将许多与大型模型相关的东西进行进一步封装,使得咱们这些AI初学者也能够用很少的工作量建立一个私有大型语言模型。而且,有许多成熟的东西可供咱们运用,能够帮助咱们进一步运用和微调大型模型。

因此,本文是为AI初学者们(包括我自己)编写的保姆级大型模型布置和运用指南。现在正值阿里云免费试用方案,咱们能够不花一分钱就能够体验布置自己的大型模型的趣味。

下图就是我通过阿里云免费请求的PAI渠道资源(显卡是Nvidia V100),布置的清华大学chatGLM对话大模型,在网页端和手机端都能直接体验:

电脑端

零基础零成本,手把手部署一个属于你的私有大模型。

手机端

零基础零成本,手把手部署一个属于你的私有大模型。

下文环绕怎么手把手建立一个大模型Demo翻开,文章首要目录:

  • 收取阿里云免费运用资源

  • 创立并运用PAI渠道实例

  • 布置清华ChatGLM大模型

  • 加餐:免费额度用量查询

  • 总结和展望

收取阿里云免费运用资源

免费试用活动页

free.aliyun.com/

只需没有请求过PAI-DSW资源的新老用户皆可请求5000CU的免费额度,3个月内运用。

至于5000CU能用多久,和实际请求实例的功能相关,在下面会讲解。

零基础零成本,手把手部署一个属于你的私有大模型。

创立并运用PAI渠道实例

官方有PAI-DSW运用教程,教你怎么用收取的免费资源建立一个Stable Diffusion来做AI画图,假如对SD感兴趣,能够依照官方教程实践。

help.aliyun.com/document_de…

咱们收取额度后,秒到账。之后在阿里云页面内搜索PAI渠道,点击立即注册,注册PAI控制台

零基础零成本,手把手部署一个属于你的私有大模型。

注册时的页面没有截图,其中有一些可选的注册项,比方NAS,比方网关等,能够依照自己需求选取,比方期望保存自己的模型,那能够相关NAS资源。我其时没有选其他资源,仅注册了PAI,这样没有额定的收费。

随后进入控制台,创立DSW实例。

零基础零成本,手把手部署一个属于你的私有大模型。

这里选取资源,留意挑选GPU资源,并挑选支撑资源包抵扣的资源。比方下图的ecs.gn6v-c8g1.2xlarg。能够看到他们的价格里,写明了每小时消耗的CU,你能够大致计算一下,5000CU能够用多久,ecs.gn6v-c8g1.2xlarg这个类型能够跑333小时,大概连续13天。

零基础零成本,手把手部署一个属于你的私有大模型。

体系能够任意挑选,本文为了布置chatGLM,挑选pytorch1.12

零基础零成本,手把手部署一个属于你的私有大模型。

当然,中间你能够随时中止机器,就不会持续扣费。留意,这里的机器,是只要体系盘的,假如中止了机器,挂载的体系盘会被回收,你在上面下载的各种文件,模型,都会回收掉。你重新发动,是新的体系盘,文件需求重新下载。(别问我怎么知道的- -!)

零基础零成本,手把手部署一个属于你的私有大模型。

创立完成后,点击翻开,就进入了交互式的Web页面,能够开端你的模型开发之旅。

布置清华ChatGLM大模型

上面已经讲完了资源的请求和实例的创立、运用,之后小伙伴们能够自行发挥,布置自己的大模型(或者任何AI相关资源)。本文后半部分介绍一下我自己折腾布置ChatGLM对话大模型的过程,给完全不了解大模型的小伙伴打个样。

ChatGLM代码库房:

github.com/THUDM/ChatG…

咱们完全能够依照官方文档自行布置,忽略我下面的教程。也能够依照我下方的流程来操作,防止再把我踩得坑再踩一遍。

下载模型

由于模型较大(13G左右),咱们最好先把模型拉到本地,再运转。

当然,假如你也能够不下载离线模型,直接在运转时拉取模型文件。

模型文件库房:

huggingface.co/THUDM/chatg…

下载模型库房,需求装置Git LFS(Large File Storage),它用来拉去Git库房中的大型文件,比方这次用到的模型bin文件。

零基础零成本,手把手部署一个属于你的私有大模型。

由于咱们请求的体系正好是Ubuntu,在Ubuntu下装置Git LFS,能够运用如下命令:

sudo apt-get update

sudo apt-get install git-lfs

完成后,克隆模型库房:

git clone huggingface.co/THUDM/chatg…

有或许网络动摇,会导致拉取卡住,能够手动中止掉,然后进入文件夹内:

git lfs pull

这样会拉取到上图红框中LFS文件。

布置模型

完成模型下载后,咱们下载模型运转代码:

git clone github.com/THUDM/ChatG…

进入文件夹,创立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,咱们将两种布置模型的主代码文件都修正一下,都修正为如下图所示的途径:

  • cli_demo.py: 命令行交互界面
  • web_demo.py:Web图形交互界面

零基础零成本,手把手部署一个属于你的私有大模型。

咱们直接用官方供给的网页版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:当然能够,懒汉式单例形式的具体完成方法如下:

  1. 将 Singleton 类做成一个接口。
  2. 完成 Singleton 接口的类能够是多个,但它们都应该运用 getInstance 办法来获取单例目标,并回来一个指向该目标的引证。
  3. 完成 Singleton 接口的类中,能够有一个内部类来担任创立单例目标。
  4. 内部类应该完成 static 关键字,并运用 synchronized 关键字完成线程安全。
  5. 内部类应该覆盖 getInstance 办法,以完成懒加载。例如,能够创立一个静态变量来存储单例目标,并在需求时才创立该变量。
  6. 在需求运用单例目标的当地,能够调用内部类的办法,来获取单例目标。
    以下是一个懒汉式单例形式的示例代码:
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与其他范畴的结合,为自己的职业开展和未来规划供给更多的或许性。