当前位置: 首页 > news >正文

开源可部署+国产化适配:Lychee-Rerank在麒麟V10+海光C86平台部署记录

开源可部署+国产化适配:Lychee-Rerank在麒麟V10+海光C86平台部署记录

1. 项目背景与价值

在信息检索和文档处理领域,相关性评分是一个核心且关键的技术环节。传统的云端API服务虽然方便,但存在数据隐私、网络依赖和使用成本等问题。Lychee-Rerank作为一个开源的相关性评分工具,提供了纯本地化的解决方案,特别适合对数据安全要求较高的场景。

本次部署实践基于麒麟V10操作系统和海光C86硬件平台,这是国产化替代的重要技术路线。通过在实际生产环境中的部署测试,验证了Lychee-Rerank在国产化平台上的兼容性和性能表现,为相关行业提供了可行的技术参考。

工具的核心价值在于:

  • 完全本地化:所有数据处理和推理都在本地完成,无需网络连接
  • 数据安全:敏感文档无需上传到第三方服务,杜绝隐私泄露风险
  • 国产化适配:支持国产操作系统和硬件平台,符合信创要求
  • 灵活定制:支持自定义指令和评分规则,适应不同业务场景

2. 环境准备与依赖安装

2.1 系统环境要求

本次部署基于以下环境:

  • 操作系统:麒麟V10 SP2
  • CPU架构:海光C86(x86_64兼容)
  • Python版本:3.8+
  • 内存要求:至少8GB(模型加载需要约3GB内存)

2.2 基础依赖安装

首先更新系统包管理器并安装基础开发工具:

# 更新系统包列表 sudo yum update # 安装开发工具和编译依赖 sudo yum install -y gcc gcc-c++ make cmake sudo yum install -y python3-devel openssl-devel libffi-devel

2.3 Python环境配置

创建独立的Python虚拟环境并安装必要依赖:

# 创建虚拟环境 python3 -m venv lychee-env source lychee-env/bin/activate # 安装核心Python依赖 pip install --upgrade pip pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu pip install streamlit transformers sentencepiece protobuf

2.4 模型文件准备

由于Lychee官方权重文件可能不可用,我们使用Qwen2.5-1.5B作为替代方案:

# 创建项目目录 mkdir lychee-rerank && cd lychee-rerank # 下载模型文件(可选,transformers会自动下载) # 或者手动放置已下载的模型到指定目录

3. 部署与配置过程

3.1 项目结构搭建

创建标准的项目文件结构:

lychee-rerank/ ├── app.py # Streamlit主应用 ├── rerank_model.py # 推理模型封装 ├── requirements.txt # 依赖列表 ├── models/ # 模型文件目录 └── examples/ # 示例文档

3.2 核心推理代码实现

创建rerank_model.py文件,实现评分核心逻辑:

import torch from transformers import AutoTokenizer, AutoModelForCausalLM import numpy as np class LycheeRerank: def __init__(self, model_path="Qwen/Qwen2.5-1.5B"): self.device = "cuda" if torch.cuda.is_available() else "cpu" self.tokenizer = AutoTokenizer.from_pretrained(model_path) self.model = AutoModelForCausalLM.from_pretrained( model_path, torch_dtype=torch.float16 if self.device == "cuda" else torch.float32, device_map="auto" if self.device == "cuda" else None ) self.system_prompt = "判断以下文档是否与查询相关。只回答'是'或'否'。" def calculate_relevance(self, instruction, query, document): prompt = f"<Instruction>{instruction}</Instruction>\n<Query>{query}</Query>\n<Document>{document}</Document>" inputs = self.tokenizer(prompt, return_tensors="pt").to(self.device) with torch.no_grad(): outputs = self.model(**inputs) # 提取"是"的概率作为相关性分数 logits = outputs.logits[0, -1, :] yes_token_id = self.tokenizer.convert_tokens_to_ids("是") no_token_id = self.tokenizer.convert_tokens_to_ids("否") yes_logit = logits[yes_token_id].item() no_logit = logits[no_token_id].item() # 使用softmax计算概率 yes_prob = np.exp(yes_logit) / (np.exp(yes_logit) + np.exp(no_logit)) return yes_prob

3.3 可视化界面开发

创建app.py文件,实现Streamlit用户界面:

import streamlit as st import pandas as pd from rerank_model import LycheeRerank # 初始化模型 @st.cache_resource def load_model(): return LycheeRerank() def main(): st.title("⚖️ Lychee-Rerank 相关性评分工具") st.markdown("基于Qwen2.5-1.5B的本地检索相关性评分工具") # 初始化session state if 'results' not in st.session_state: st.session_state.results = None # 输入区域 col1, col2 = st.columns(2) with col1: st.subheader("输入配置") instruction = st.text_input( "指令(Instruction)", value="基于查询检索相关文档", help="自定义评分规则" ) query = st.text_area( "查询(Query)", value="What is the capital of China?", height=100, help="输入待匹配的查询语句" ) documents = st.text_area( "候选文档", value="Beijing is the capital of China.\nShanghai is the largest city in China.\nChina is located in East Asia.\nThe Great Wall is in China.\nTokyo is the capital of Japan.", height=200, help="每行输入一条候选文档,支持批量输入" ) if st.button("🚀 计算相关性分数", type="primary"): with st.spinner("计算中,请稍候..."): model = load_model() doc_list = [doc.strip() for doc in documents.split('\n') if doc.strip()] results = [] for i, doc in enumerate(doc_list): score = model.calculate_relevance(instruction, query, doc) results.append({ "rank": i + 1, "score": score, "document": doc }) # 按分数降序排序 results.sort(key=lambda x: x['score'], reverse=True) for i, res in enumerate(results): res['rank'] = i + 1 st.session_state.results = results # 结果显示区域 with col2: st.subheader("评分结果") if st.session_state.results: for result in st.session_state.results: score = result['score'] # 设置颜色和进度条 if score > 0.8: color = "green" elif score > 0.4: color = "orange" else: color = "red" st.markdown(f"**#{result['rank']} | 分数: {score:.6f}**") st.progress(score) # 显示文档内容 st.code(result['document'], language="text") st.divider() if __name__ == "__main__": main()

4. 运行与测试验证

4.1 启动应用程序

在项目目录下执行以下命令启动服务:

# 激活虚拟环境 source lychee-env/bin/activate # 启动Streamlit应用 streamlit run app.py --server.port 8501 --server.address 0.0.0.0

启动成功后,控制台会显示访问地址,通常为http://localhost:8501

4.2 功能测试验证

通过浏览器访问应用界面后,进行以下测试:

  1. 基础功能测试:使用默认的示例数据,点击计算按钮验证是否能正常返回结果
  2. 自定义指令测试:修改Instruction内容,验证评分规则是否相应变化
  3. 批量文档测试:输入多条候选文档,验证批量处理能力
  4. 性能测试:测试不同数量文档的处理时间,评估性能表现

4.3 国产化适配验证

在海光C86平台上的特别验证点:

# 验证CPU架构兼容性 lscpu | grep Architecture # 应显示:x86_64 # 验证麒麟系统版本 cat /etc/os-release | grep PRETTY_NAME # 应显示:Kylin Linux Advanced Server V10 # 验证Python环境 python3 -c "import torch; print(torch.__version__); print('CUDA available:', torch.cuda.is_available())"

5. 部署优化与实践建议

5.1 性能优化策略

针对国产化平台的性能优化建议:

# 模型加载优化 model = AutoModelForCausalLM.from_pretrained( model_path, torch_dtype=torch.float16, # 使用半精度减少内存占用 device_map="auto", low_cpu_mem_usage=True # 减少CPU内存使用 ) # 推理过程优化 with torch.inference_mode(): # 比torch.no_grad()更高效 outputs = model(**inputs)

5.2 内存管理建议

对于内存受限的环境:

  1. 分批处理:大量文档时采用分批处理,避免内存溢出
  2. 模型量化:使用8bit或4bit量化进一步减少内存占用
  3. 缓存清理:定期清理GPU和CPU缓存

5.3 生产环境部署

正式环境部署建议:

  1. 使用反向代理:通过Nginx代理Streamlit服务
  2. 设置开机自启:使用systemd管理服务进程
  3. 日志监控:配置完善的日志记录和监控系统
  4. 定期更新:保持模型和依赖库的版本更新

6. 总结

通过本次在麒麟V10和海光C86平台的部署实践,我们成功验证了Lychee-Rerank相关性评分工具在国产化环境中的可行性和稳定性。工具展现了优秀的兼容性和性能表现,为相关行业提供了可靠的本地化解决方案。

关键成果

  • 完成了从模型加载到界面展示的完整部署流程
  • 验证了国产化平台的兼容性和性能表现
  • 提供了开箱即用的可视化评分工具
  • 确保了数据处理的完全本地化和安全性

实践价值: 本次部署记录为类似项目的国产化适配提供了详细参考,特别是在处理敏感数据的场景下,本地化解决方案显得尤为重要。Lychee-Rerank不仅是一个技术工具,更是数据安全和自主可控理念的具体实践。

对于需要在国产化环境中部署类似AI应用的团队,本文提供的经验和方法论具有直接的参考价值。随着国产化替代进程的加速,这类经过验证的解决方案将发挥越来越重要的作用。


获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

http://www.jsqmd.com/news/456412/

相关文章:

  • 5个理由让你立即切换到BiliBili-UWP客户端
  • PowerPaint-V1 Gradio效果展示:YOLOv8目标检测与智能修复完美结合
  • 突破传感器识别难题:FanControl的3个创新方案
  • 小白也能搞定:HY-MT1.5-7B翻译模型5分钟部署教程
  • 专业DRM破解工具:SteamAutoCrack游戏启动工具使用指南
  • Cogito-V1-Preview-Llama-3B多语言翻译效果展示:技术文档中英互译
  • 零代码部署AI:Qwen3-0.6B-FP8结合Chainlit的简易教程
  • openclaw安装部署本地windows系统详细版教程(保姆级) - The-Chosen
  • vLLM实战:如何为ERNIE-4.5-0.3B模型配置高效的推理服务
  • AnimateDiff开源大模型部署:支持中小企业自主可控AI视频生产
  • Z-Image-GGUF多场景:小红书封面、公众号头图、B站视频缩略图定制生成
  • Nano-Banana实现PID控制算法:工业自动化应用
  • MKS Monster8全攻略:8轴主板配置指南与性能优化方案
  • GME-Qwen2-VL-2B-Instruct部署案例:中小企业图文内容质量自动化评估系统
  • VideoAgentTrek Screen Filter插件开发:为Ollama平台添加视频过滤能力
  • 隐写术实战:利用盲文解密工具快速解决WUSTCTF2020的find_me挑战
  • CH347实战 USB转JTAG:基于openFPGALoader实现多平台FPGA烧录指南
  • 5个核心优势:UiCard在游戏UI开发中的高效解决方案
  • 李慕婉-仙逆-造相Z-Turbo C语言基础:底层接口开发入门
  • nlp_gte_sentence-embedding_chinese-large在跨语言检索中的突破性表现
  • 揭秘MCP状态同步失效真相:如何在毫秒级延迟下实现100%最终一致性?
  • 不用写代码!用App Inventor 2+百度API做天气APP的全过程记录
  • Ostrakon-VL-8B开发利器:在IDEA中高效调试模型Python代码
  • 一站式音乐资源聚合:构建跨平台音频服务的创新解决方案
  • GLM-OCR实战:利用卷积神经网络原理优化自定义场景识别
  • 次元画室实用技巧:如何写出让AI更好理解的角色描述提示词
  • 通义千问2.5-7B-Instruct vs Gemma-7B:开源模型性能横向评测
  • YOLOFuse优化指南:如何根据显存和精度需求选择融合策略
  • CheatEngine-DMA技术解析与实战指南
  • Barrier进阶玩法:用树莓派搭建永久键鼠共享服务器(含SSL证书避坑)