一. 部署背景
为了确保现代科技智能问答助手的性能和可靠性,我们选择在阿里云的英特尔至强可扩展处理器的G8i云环境实例上进行部署。G8i实例提供高性能计算能力,适用于需要大量计算资源和高并发处理能力的应用场景。
二. 部署目标
- 确保问答助手的高响应速度和处理能力。
- 提供稳定的服务,以应对高并发的用户查询。
- 优化资源使用,降低运营成本。
三.阿里云G8i云环境实例概述
G8i实例是阿里云推出的基于英特尔至强可扩展处理器的GPU计算型实例,具有以下特点:
- 高性能的CPU和GPU,适合进行大规模数据处理和机器学习任务。
- 高速的本地SSD存储,提供低延迟的数据读写能力。
- 支持弹性扩展,可以根据业务需求动态调整资源。
四.部署架构
4.1 硬件配置
- CPU:英特尔至强可扩展处理器,提供强大的计算能力。
- 内存:高容量内存,确保多任务处理和大数据处理的流畅性。
- 存储:本地SSD存储,用于存放系统和应用数据。
- 网络:高速网络连接,支持大量并发用户访问。
4.2 软件配置
- 操作系统:Linux操作系统,提供稳定的运行环境。
- Web框架:Flask,用于构建问答助手的Web服务。
- 数据库:ElasticSearch和Milvus,用于文档存储和检索。
- 大模型:百川大模型,用于处理自然语言理解和生成。
4.3 部署流程
1. 环境准备:在阿里云控制台创建G8i实例,配置所需的CPU、内存和存储资源。
2. 系统安装:安装Linux操作系统和必要的软件环境。
3. 服务部署:
- 部署Flask Web框架,设置API接口。
- 配置ElasticSearch和Milvus数据库,创建索引和集合。
- 部署百川大模型,确保模型加载和运行。
4. 性能优化:
- 优化ElasticSearch和Milvus的配置,提高检索效率。
- 对Flask应用进行性能调优,提高响应速度。
5. 安全配置:
- 配置防火墙和安全组,限制不必要的网络访问。
- 使用SSL/TLS加密数据传输,保护用户数据安全。
6. 测试验证:
- 进行系统测试,确保所有服务正常运行。
- 进行性能测试,验证系统的响应速度和稳定性。
5. 监控与维护
- 监控:使用阿里云监控服务,实时监控系统性能和资源使用情况。
- 日志:配置日志收集和分析,便于问题诊断和性能优化。
- 备份:定期备份系统和数据,确保数据安全和快速恢复。
6. 风险评估与应对措施
- 硬件故障:通过阿里云的自动备份和快速恢复功能,减少硬件故障的影响。
- 网络攻击:加强网络安全防护,定期更新安全策略和补丁。
- 性能瓶颈:通过监控和日志分析,及时发现并解决性能瓶颈。
7. 结论
通过在阿里云G8i云环境实例上部署现代科技智能问答助手,我们能够提供高性能、高稳定性的服务,满足用户对现代科技知识的需求。通过持续的监控和优化,我们确保服务的长期稳定运行。
五.项目流程。
现代科技智能文档问答助手的流程图如下:
文档问答流程图
- 文档加载(Document Loading):加载文档,文档格式为URL,PDF,Database。本项目暂时先支持txt文件,后续将支持更多文件格式;
- 文档划分(Splitting):将文档按照特定格式进行划分,形成文档片段。本项目采用的文档划分方式为LangChain中的RecursiveCharacterTextSplitter,参考网址为:https://python.langchain.com/docs/modules/data_connection/document_transformers/text_splitters/recursive_text_splitter。
- 文档存储(Storage):将划分后的文档进行向量嵌入,再插入至向量数据库。本项目采用的储存方式为ElasticSearch及向量数据库Milvus。
- 文档召回:对于输入query,从文档存储中召回相关文档片段。本项目采用的召回方式为ElasticSearch中的内置BM25相似度算法及Milvus中的向量距离。
- 问答输出:对于召回文档和输入query,构建合适的Prompt,利用大模型(LLM)输出最终答案。
本项目开发的Web框架为Flask,API接口两个:文件上传接口和文档问答接口。文件上传接口如下:
演示一:选择百川模型并提问
演示二:选择百川模型并上传文件
文档召回采用ElasticSearch和Milvus相结合的方式,设置ElasticSearch和Milvus召回最相似文本数量为2。
ElasticSearch中创建的index为docs,mapping结构如下:
{
"docs" : {
"mappings" : {
"properties" : {
"cont_id" : {
"type" : "integer"
},
"content" : {
"type" : "text",
"analyzer" : "ik_smart"
},
"source" : {
"type" : "text"
}
}
}
}
}
其中source代表上传文档名称,cont_id为文本片段编号,content为文本片段。content字段采用的analyzer为ik_smart,该analyzer可较好地对中文进行分词。
Milvus创建的collection为docs_qa,schema如下:
本文使用的文档为《封神》耗资30亿,第一部上映第次日,北京文化跌停,访问网址为:https://m.jrj.com.cn/madapter/stock/2023/07/22141537710254.shtml ,将其文本内容保存为txt文件,并通过文件上传接口,将数据内容插入至ES和Milvus。
六、项目测试:
我们的问题(输入query)为:封神第一部什么时候上映的?,对其进行向量嵌入,在ES和Milvus中召回的相似文本为:
《封神》耗资30亿,第一部上映第次日,北京文化跌停热点快报 2023-07-22 14:15:04《封神第一部》刚刚上映,北京文化股价却出现下跌。7月21日,A股影视传媒板块震荡下挫,北京文化收于跌停,报7.56元,总市值54.12亿元,板块内个股慈文传媒、荣信文化、中国出版、上海电影等跟跌。值得关注的是,《封神第一部》7月20日才正式上映,北京文化为该影片的出品方。
落地误差只有1公里,3条飞船实现了第一阶段的全部任务。
北京文化曾成功投资《我不是药神》《战狼》《流浪地球》《你好,李焕英》等多部爆款影片。此前《封神第一部》宣布定档,北京文化曾迎来3连板。
大模型问答的Prompt为:
[
{
"role": "system",
"content": "你是一个出色的文档问答助手,回答要合理、简洁,回复语言采用中文。若问题与文本片段相关,请根据给定的文本片段和问题,答案以\"根据文档知识\"开头若问题与文本片段相关性较小,则使用外部知识回答问题,答案以\"根据外部知识\"开头。"
},
{
"role": "user",
"content": "使用下面的文本片段列表,回答问题:封神第一部什么时候上映的?\n\n文本片段1: 《封神》耗资30亿,第一部上映第次日,北京文化跌停热点快报 2023-07-22 14:15:04《封神第一部》刚刚上映,北京文化股价却出现下跌。7月21日,A股影视传媒板块震荡下挫,北京文化收于跌停,报7.56元,总市值54.12亿元,板块内个股慈文传媒、荣信文化、中国出版、上海电影等跟跌。值得关注的是,《封神第一部》7月20日才正式上映,北京文化为该影片的出品方。\n文本片段2: 落地误差只有1公里,3条飞船实现了第一阶段的全部任务。\n文本片段3: 北京文化曾成功投资《我不是药神》《战狼》《流浪地球》《你好,李焕英》等多部爆款影片。此前《封神第一部》宣布定档,北京文化曾迎来3连板。\n"
}
]
输出答案为:
根据文档知识,《封神第一部》于2023年7月20日上映。
六.英特尔优化技术实现细节
在本项目中,我们深入采用了多种英特尔优化工具,以确保模型在性能和效率上达到最佳状态。以下是我们使用的技术和工具的详细说明:
详细技术实现:OpenVINO™ Toolkit
OpenVINO™ Toolkit** 是一个强大的工具集,用于深度学习模型的推理加速和优化。它支持多种英特尔硬件,包括CPU、GPU、VPU和FPGA,使得开发者能够充分利用这些硬件的计算能力。以下是我们如何使用OpenVINO™ Toolkit来优化和加速我们的模型的具体步骤和代码示例。
1. 推理加速
目标:利用OpenVINO™ Toolkit的推理引擎,加速模型在英特尔硬件上的执行速度。
实现步骤:
1. 安装OpenVINO™ Toolkit:
- 首先,确保你的系统满足OpenVINO™ Toolkit的安装要求。
- 从英特尔官网下载并安装OpenVINO™ Toolkit。
2. 准备模型:
- 使用OpenVINO™ Toolkit的`model downloader`工具下载预训练模型或使用自己的模型。
3. 模型转换:
- 使用`OpenVINO™ Model Optimizer`将模型从原始格式(如TensorFlow, PyTorch等)转换为OpenVINO™的中间表示(IR)格式。
```bash
python3 mo.py --input_model your_model.pb --output_dir output_dir
```
4. 模型编译:
- 使用`OpenVINO™ Inference Engine`编译IR模型,生成可在特定硬件上运行的优化模型。
```bash
python3 compile_model.py --name your_model --input input_model.xml --output_dir output_dir
```
5. 推理加速:
- 使用OpenVINO™的推理引擎加载编译后的模型,并在目标硬件上进行推理。
```python
from openvino.runtime import Core
# 加载推理引擎
core = Core()
# 读取优化后的模型
model = core.read_model(model='output_dir/your_model.xml', weights='output_dir/your_model.bin')
# 选择最佳设备进行推理
compiled_model = core.compile_model(model=model, device_name='CPU')
# 推理
results = compiled_model.infer_new_request({ 'input': input_data })
```
2. 模型优化
目标:通过量化和编译优化模型,以适应不同的硬件架构。
实现步骤:
1. 量化:
- 使用OpenVINO™的量化工具对模型进行量化,减少模型大小和提高推理速度。
```bash
python3 mo.py --input_model your_model.pb --output_dir output_dir --data_type FP16
```
2. 编译:
- 将量化后的模型编译为特定硬件的优化格式。
```bash
python3 compile_model.py --name your_model_quantized --input input_model.xml --output_dir output_dir
```
3. 跨平台支持
目标:确保模型在不同操作系统和硬件配置上的兼容性。
实现步骤:
1. 测试不同平台:
- 在Windows, Linux, MacOS等操作系统上测试模型的兼容性。
2. 调整配置:
- 根据测试结果调整模型配置,确保在所有目标平台上都能正常运行。
3. 文档和支持:
- 提供详细的安装和使用文档,帮助用户在不同平台上部署和使用模型。
通过这些详细的步骤和代码示例,我们确保了模型在多种英特尔硬件上的高效运行,同时保持了跨平台的兼容性。这不仅提高了模型的性能,也扩大了我们的用户基础。