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: strdef 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_tokensdef 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_embeddingif __name__ == "__main__":# Load LLMtokenizer = AutoTokenizer.from_pretrained(TOKENIZER_PATH, trust_remote_code=True)model = AutoModel.from_pretrained(MODEL_PATH, trust_remote_code=True, device_map="auto").eval()# load Embeddingembeddings_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: fastgptimage: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt:v4.7 # git# image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt:v4.7 # 阿里云ports:- 3000:3000networks:- fastgptdepends_on:- mongo- pgrestart: alwaysenvironment:# 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/postgresvolumes:- ./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