llama2模型 类chatGPT产品体验

简介

一个语言模型,类似chatGPT. 可以本地部署, 下面列下规格

  • 7b 需要6~8GB显存
  • 13b 需要13~16GB显存
  • 70b 需要48GB显存,可以2张4090

安装

申请和下载模型

点击 https://huggingface.co/meta-llama

选择模型 Llama2-chat,13B 下载

将会跳转到Facebook公司的申请界面,勾选协议,提交申请

平替方案

如果觉得麻烦

下载这个GGML模型 https://huggingface.co/TheBloke/Firefly-Llama2-13B-v1.2-GGML

firefly-llama2-13b-v1.2.ggmlv3.q6_K.bin

文件链接 https://huggingface.co/TheBloke/Firefly-Llama2-13B-v1.2-GGML/blob/main/firefly-llama2-13b-v1.2.ggmlv3.q6_K.bin

python虚拟环境

# 创建python虚拟环境
python -m venv ./venv
# 进行python虚拟环境
./venv/Script/activate

安装pytorch with cuda

# https://pytorch.org/get-started/locally/
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118

安装ui

# 安装ui
git clone https://github.com/oobabooga/text-generation-webui.git
# 进入ui目录
cd text-generation-webui
# 安装ui依赖
pip install -r requirements.txt
# 修复bitsandbytes bug
pip uninstall bitsandbytes
pip install bitsandbytes-windows
# 启动UI
python server.py

使用

实操llama2 GGML 13B q6_K

将模型放入ui目录下的models文件夹,

音频转文字 Whisper

简介

一个音频转文本的模型 https://github.com/openai/whisper

依赖

  • python
  • ffmpeg

命令行使用

验证GPU

venv环境下 输入whisper -h

–device # 如果默认是cpu 则证明cuda安装失败

# 这样也能验证cuda是否安装了
python -c "import torch; print(torch.version.cuda)"

重装torch gpu版本

# 卸载纯cpu版
pip uninstall torch
# clean cache
pip cache purge
# copy from  https://pytorch.org/get-started/locally/
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118

再次验证 whisper -h

咒语生成图片 Stable Diffusion web UI

简介

旨在个人快速回忆Stable Diffusion相关关系

Stable Diffusion

是一个深度学习,文转图模型.

Stable Diffusion web UI 即面向用户提供界面操作工具, 链接为

https://github.com/AUTOMATIC1111/stable-diffusion-webui

其中该界面为英语,支持汉化插件

https://github.com/VinsonLaro/stable-diffusion-webui-chinese

PyTorch

官网 https://pytorch.org/ 是一个深度学习框架

我的安装选择

  • OS: Windows
  • package: pip
  • language: python
  • compute Platform: CUDA

教程

https://github.com/AUTOMATIC1111/stable-diffusion-webui/wiki

启动

下载完web UI后,运行webui-user.bat即可

在运行过程避免不了报错,很考验python debug能力。

初始化

设置webui-user.bat参数

set PYTHON= #python文件路径
set GIT= # git文件路径
set VENV_DIR= # venv目录
set COMMANDLINE_ARGS=--xformers # 启动参数

将python,git的bin path 加入系统环境变量下的path。

关于Go代码生成

目的

Go Kitex提供了自定义模板生成代码,使用起来挺方便的.

有望改造成支持公司内部go代码生成工具

处理要素

cli工具整合

这里推荐2个包,封装了cli和参数解析

基本数据对象定义

提供了文件生成时的数据渲染对象 PackageInfo

模板渲染使用html/template语法

额外参数在context中解析

cli传递参数过多会带来复杂性,需要额外的.json文件数据提供在上下文中解析.

多模板文件定义

通过指定目录加载其下所有模板文件

模板文件格式为.yaml

生成的文件路径也支持变量解析.

其中能独立定义新增代码部分

统一入口

初始化和更新行为都为同一命令,减少处理成本

额外点

  • 多任务并行处理文件生成
  • 跨平台支持

go pkg包设计

设计考虑

以下是个人的建议,随便看看了解下

context支持

一般入参数context是第一个参数,提供了timeout机制

logger接口定义

在组件的初始化时,将使用方的日志实例进行接口约束,

要求实现其debug,error级别method.

可以参考gorm的logger设计

hook注入

方便使用方对metric的收集,可以参考redis hook设计

布局了解

这里只是提供参考建议

知道internal目录对内部系统的保护

跨平台支持

查看支持平台

go tool dist list

条件编译约束

//go:build (linux && 386) || (darwin && !cgo)

https://pkg.go.dev/cmd/go#hdr-Build_constraints

聊天系统设计调研

总体架构分层

  • 接入层,无状态
  • 逻辑层
  • 存储层

这里是参考了陌陌设计

连接层

这里有2种方案选择

  • WebSocket
  • MQTT

关于MQTT,有EMQX中间件.

消息上线可以走HTTP接口,即客户端发给服务端消息

消息下行可以走EMQX订阅主题,即服务端推送消息给客户端

连接层属于无状态,支持水平扩展.

逻辑层

通用消息格式定制

以及业务路由分发决策

设计规则

不丢消息

需要业务ACK机制

消息去重

服务端与客户端都需要做到

时序一致性

可以用snowflake算法.

利用局部性原理减少id生成器压力,有利于水平扩展

缓存设计

由于实时系统,基本上有一层cache,类似内核系统的buffer。

多级缓冲,面向c端场景的话一般链路不会太长,而且要考虑数据回种,分布式一致性挑战.

大概local cache -> redis (读写分离)-> database(读写分离)

其他考虑场景

  • 接入APP推送
  • 接入风控
  • 数据多端同步
  • 多条消息打包与压缩格式设计
  • 万人大群的数据扇出
  • 明星突发性空降某频道
  • 数据埋点监控
  • 系统自动扩容

存储层

离线消息

如果需求量不大,Mysql即可以解决.

聊天应用的读写比例大概是1:1.

数据库

Cassandra

Discord公司有在用.偏向AP场景

HBase

Facebook公司有在用.偏向CP场景

个人想法

前期用Mysql,但是封装一层接口,为后期数据库迁移作准备.

大数据库选择要还看云数据库商支持程度,说不定还有其他云产品合适.

对象存储

minio

消息队列

rabbitMQ比较适合业务,

但是追求高吞吐的kafka,自己必须封装多一层机制来保证业务的一致性.


后续有的话再更新