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

通过 ModelScope 下载模型,解决sentence-transformers/all-MiniLM-L6-v2无法下载问题


分步解决方案

步骤 1:通过 ModelScope 下载模型
# 安装 ModelScope CLI
pip install modelscope

# 下载模型到本地目录
modelscope download --model 'sentence-transformers/all-MiniLM-L6-v2' --local_dir './models'
步骤 2:修改代码适配 ModelScope
import os
os.environ['MODELSCOPE_CACHE'] = './models'  # 指定模型缓存路径
from modelscope.models import Model
from modelscope.pipelines import pipeline
from modelscope.utils.constant import Tasks

class CodeVectorStore:
    def __init__(self, persist_directory: str = "vector_store"):
        """初始化向量数据库"""
        # 加载本地模型
        self.embedding_model = pipeline(
            task=Tasks.sentence_embedding,
            model='./models/sentence-transformers/all-MiniLM-L6-v2',
            model_revision='v1.0.0'
        )
        
        # 自定义嵌入函数
        self.embeddings = self._modelscope_embedding
        
        # 初始化 Chroma
        self.vector_store = Chroma(
            persist_directory=persist_directory,
            embedding_function=self.embeddings,
            collection_name="code_snippets"
        )

    def _modelscope_embedding(self, texts: List[str]) -> List[List[float]]:
        """生成嵌入向量"""
        results = self.embedding_model(inputs={'source_sentence': texts})
        return [result['embedding'].tolist() for result in results]
步骤 3:移除 Hugging Face 依赖
# 删除原有导入
- from langchain_huggingface import HuggingFaceEmbeddings

# 添加 ModelScope 依赖
+ from modelscope.pipelines import pipeline
+ from modelscope.utils.constant import Tasks

完整代码实现

import os
os.environ['MODELSCOPE_CACHE'] = './models'
from typing import List, Dict, Any
from langchain_chroma import Chroma
from modelscope.pipelines import pipeline
from modelscope.utils.constant import Tasks
import logging
import asyncio
import json

logger = logging.getLogger(__name__)

class CodeVectorStore:
    def __init__(self, persist_directory: str = "vector_store"):
        """初始化向量数据库"""
        # 加载本地模型
        self.embedding_model = pipeline(
            task=Tasks.sentence_embedding,
            model='./models/sentence-transformers/all-MiniLM-L6-v2',
            model_revision='v1.0.0'
        )
        
        # 初始化 Chroma
        self.vector_store = Chroma(
            persist_directory=persist_directory,
            embedding_function=self._modelscope_embedding,
            collection_name="code_snippets"
        )

    def _modelscope_embedding(self, texts: List[str]) -> List[List[float]]:
        """自定义嵌入函数"""
        results = self.embedding_model(inputs={'source_sentence': texts})
        return [result['embedding'].tolist() for result in results]

    async def add_code_to_store(self, code_snippets: List[Dict[str, Any]]):
        """添加代码到向量数据库"""
        try:
            texts = [snippet["code"] for snippet in code_snippets]
            metadatas = [...]  # 元数据处理逻辑保持不变
            
            # 生成嵌入向量
            embeddings = self._modelscope_embedding(texts)
            
            # 使用 Chroma 底层 API 添加数据
            await asyncio.to_thread(
                self.vector_store._collection.add,
                embeddings=embeddings,
                documents=texts,
                metadatas=metadatas
            )
        except Exception as e:
            logger.error(f"添加代码失败: {str(e)}")
            raise

    # 其他方法保持不变...

关键配置说明

1. 模型目录结构
models/
└── sentence-transformers/
    └── all-MiniLM-L6-v2/
        ├── config.json
        ├── pytorch_model.bin
        └── tokenizer_config.json
2. 环境变量设置
# 设置缓存路径(Linux/macOS)
export MODELSCOPE_CACHE=./models

# 或永久生效(写入 ~/.bashrc)
echo "export MODELSCOPE_CACHE=./models" >> ~/.bashrc
3. 性能优化参数
self.embedding_model = pipeline(
    task=Tasks.sentence_embedding,
    model='./models/sentence-transformers/all-MiniLM-L6-v2',
    model_revision='v1.0.0',
    device='cpu',        # 指定 CPU 推理
    quantization=True,   # 8-bit 量化
    batch_size=32        # 增大批处理量
)

验证测试

def test_embedding():
    store = CodeVectorStore()
    texts = ["def test(): pass", "print('hello')"]
    embeddings = store._modelscope_embedding(texts)
    
    # 验证输出维度
    assert len(embeddings) == 2
    assert len(embeddings[0]) == 384  # MiniLM-L6 的向量维度
    
    # 验证相似度计算
    similarity = np.dot(embeddings[0], embeddings[1])
    print(f"相似度: {similarity:.4f}")  # 应大于 0.5

优势对比

功能原 Hugging Face 方案新 ModelScope 方案
国内下载速度慢(依赖国际带宽)快(阿里云 CDN 加速)
模型管理分散式管理统一企业级模型仓库
安全合规需自行处理模型合规内置模型使用协议管理
离线支持需复杂配置原生支持离线模式
服务稳定性受国际网络波动影响国内服务器保障

企业级增强

1. 私有镜像搭建
# 使用 Docker 部署 ModelScope 镜像服务
docker run -d -p 8080:8080 \
  -v /path/to/models:/models \
  registry.cn-hangzhou.aliyuncs.com/modelscope/modelscope-server:latest
2. 访问控制配置
# Nginx 配置示例
server {
    listen 80;
    server_name models.internal.com;
    
    location / {
        auth_basic "Model Server";
        auth_basic_user_file /etc/nginx/htpasswd;
        proxy_pass http://localhost:8080;
    }
}

通过以上方案,您可以在完全脱离 Hugging Face 生态的情况下,使用 ModelScope 的国内服务稳定运行代码审计工具。此方案特别适合以下场景:

  • 企业内网环境
  • 需要代码审计工具完全自主可控
  • 对模型下载速度有较高要求
  • 需要符合国内数据合规要求
http://www.dtcms.com/a/112351.html

相关文章:

  • 【leetcode100】数组中的第K个最大元素
  • Scala 面向对象编程总结
  • 【虚拟机VMware】银河麒麟系统虚拟机:网络异常处理
  • FrameWork基础案例解析(四)
  • HTTPS 之fiddler抓包--jmeter请求
  • Dynamics 365 Business Central Subscription Recurring Billing 订阅和分期付款详解
  • winRAR禁止广告弹窗
  • Elixir语言的消息队列
  • 进程和线程的概念及Linux操作
  • 解释区块链技术的应用场景和优势
  • 【实战】如何基于 Python Flask 快速开发一个支持 OpenAI 流式接口的 LLM Server
  • 【MySQL】01.MySQL环境安装
  • O(1) 时间复杂度数据设计题
  • 我考研拟录取=稳了吗?
  • Element-plus弹出框popover,使用自定义的图标选择组件
  • sqlalchemy查询json
  • STM32CubeMX-H7-11-IIC读写MPU6050模块(上)-软件IIC协议的解析、封装,实现基本功能获取MPU6050的ID
  • 结肠镜3D视频数据集-C3VD论文中文版
  • 构建自己的私有 Git 服务器:基于 Gitea 的轻量化部署实战指南
  • 2025年3月 Scratch 图形化(二级)真题解析 中国电子学会全国青少年软件编程等级考试
  • 当 “原子” 遇上 “光腔”:量子计算的新舞台
  • 前端页面鼠标移动监控(鼠标运动、鼠标监控)鼠标防抖处理、mousemove、debounce()、事件停止触发、超时触发
  • 博途之S7通讯
  • 仿小红书社交源码+及时通讯聊天软件APP源码
  • Springboot面试篇
  • 三维扫描助力文化遗产数字化保护
  • [特殊字符] 使用 Handsontable 构建一个支持 Excel 公式计算的动态表格
  • 【调研】YOLO算法在FPGA/ZYNQ上的部署与加速
  • 文化算法初探
  • 决策树实战:用Python实现智能分类与预测