FastGPT+ChatGLM本地部署
本地部署硬性要求:显存13g以上
关于环境的安装就不多赘述,conda + pip 可以解决大部分问题
ChatGLM本地运行
- m3e-base
- chatglm3-6b
在huggingface上可以下载上述模型,如果没有梯子可以使用huggingface镜像
从github上拉取fastGPT和chatglm3两个项目
下载好上述模型后,需要按照FastGPT的 file -> models -> ChatGLM2 -> openai_api.py
来配置ChatGLM3 的 openai_api_demo -> api-server.py
在api-server.py
加入下述code
class EmbeddingRequest(BaseModel):
input: List[str]
model: str
def num_tokens_from_string(string: str) -> int:
"""Returns the number of tokens in a text string."""
encoding = tiktoken.get_encoding('cl100k_base')
num_tokens = len(encoding.encode(string))
return num_tokens
def expand_features(embedding, target_length):
poly = PolynomialFeatures(degree=2)
expanded_embedding = poly.fit_transform(embedding.reshape(1, -1))
expanded_embedding = expanded_embedding.flatten()
if len(expanded_embedding) > target_length:
# 如果扩展后的特征超过目标长度,可以通过截断或其他方法来减少维度
expanded_embedding = expanded_embedding[:target_length]
elif len(expanded_embedding) < target_length:
# 如果扩展后的特征少于目标长度,可以通过填充或其他方法来增加维度
expanded_embedding = np.pad(
expanded_embedding, (0, target_length - len(expanded_embedding))
)
return expanded_embedding
if __name__ == "__main__":
# Load LLM
tokenizer = AutoTokenizer.from_pretrained(TOKENIZER_PATH, trust_remote_code=True)
model = AutoModel.from_pretrained(MODEL_PATH, trust_remote_code=True, device_map="auto").eval()
# load Embedding
embeddings_model = SentenceTransformer('/home/eleven/PycharmProjects/tingsheng/m3e-base', device='cpu')
uvicorn.run(app, host='0.0.0.0', port=8000, workers=1)
加入的目的就是为了填补api_server.py中的一些适配的函数。修改embedding_modeks中模型路径,改成你下载的m3e-base的绝对路径,device选择cpu或cuda都可以
环境的缺失报错就用pip安装即可
打开终端,在api-server.py
所在路径下输入下述命令
MODEL_PATH=/home/eleven/PycharmProjects/tingsheng/chatglm3-6b python api_server.py
其中MODEL_PATH为你chatglm3模型的绝对路径
运行结果如下:
可以看到模型在8000端口运行
docker部署
官方教程链接
官方的教程很详细,建议参考官方教程部署docker
这里重点说一下bug问题,以及配置本地模型供fastGPT使用
本地模型连接
上述的chatglm的本地运行端口号为8000,所以需要修改docker-compose.yaml文件中的OPENAI_BASE_URL
来适配本地大模型。
fastgpt:
container_name: fastgpt
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt:v4.7 # git
# image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt:v4.7 # 阿里云
ports:
- 3000:3000
networks:
- fastgpt
depends_on:
- mongo
- pg
restart: always
environment:
# root 密码,用户名为: root。如果需要修改 root 密码,直接修改这个环境变量,并重启即可。
- DEFAULT_ROOT_PSW=1234
# AI模型的API地址哦。务必加 /v1。改成你本地的IP地址加上模型运行的端口号8000
- OPENAI_BASE_URL=http://192.168.1.1:8000/v1
# AI模型的API Key。(这里默认填写了OneAPI的快速默认key,测试通后,务必及时修改)
- CHAT_API_KEY=sk-fastgpt
# 数据库最大连接数
- DB_MAX_LINK=30
# 登录凭证密钥
- TOKEN_KEY=any
# root的密钥,常用于升级时候的初始化请求
- ROOT_KEY=root_key
# 文件阅读加密
- FILE_TOKEN_KEY=filetoken
# MongoDB 连接参数. 用户名myusername,密码mypassword。
- MONGODB_URI=mongodb://myusername:mypassword@mongo:27017/fastgpt?authSource=admin
# pg 连接参数
- PG_URL=postgresql://username:password@pg:5432/postgres
volumes:
- ./config.json:/app/data/config.json
- ./fastgpt/tmp:/app/tmp
然后sudo docker-compose up -d
启动容器
打开本地链接localhost:3000
,默认用户名root
,密码1234
连接成功后
可以看到调试使用的模型是chatGLM3-6B
Bug问题
目前遇到最主要的bug问题都集中在MongoDB上
在登录出现Network error或者出现输入用户名密码后出现登录超时都是Mongo没有正确启动
在遇到上述情况时,在终端输入
sudo docker logs mongo
查看mongoDB有没有正确启动
我所遇到的bug有两个
- waiting for MongoDB to start…
- 连接超时
这时需要注意mongoDB的版本问题,如果你使用最新的版本(5.X)不行就降低版本(4.4.24),在保证mongoDB能正确启动的情况下再去访问localhost:3000