Compile Mahout-0.6

本文介绍了在Ubuntu12.04系统上使用Maven编译Mahout源码的过程,包括所需环境配置、源码下载及编译步骤,并解决了编译过程中遇到的JDK版本问题。

先说下本机系统: Ubuntu 12.04

1. 编译前,需要安装 maven

 sudo apt-get install maven
 sudo apt-get install maven2

2. 下载最新的Mahout源码, 链接如下:

http://newverhost.com/pub/mahout/0.6/mahout-distribution-0.6-src.tar.gz

3. 编译

 sudo mvn -DskipTest

3.1 编译结果

...
[INFO] ------------------------------------------------------------------------
[INFO] Building Mahout Release Package
[INFO]    task-segment: [install]
[INFO] ------------------------------------------------------------------------
[INFO] [site:attach-descriptor {execution: default-attach-descriptor}]
[INFO] [assembly:single {execution: bin-assembly}]
[INFO] Assemblies have been skipped per configuration of the skipAssembly parameter.
[INFO] [assembly:single {execution: src-assembly}]
[INFO] Assemblies have been skipped per configuration of the skipAssembly parameter.
[INFO] [install:install {execution: default-install}]
[INFO] Installing /home/lucktroy/download/mahout-distribution-0.6/distribution/pom.xml to /root/.m2/repository/org/apache/mahout/mahout-distribution/0.6/mahout-distribution-0.6.pom
[INFO] 
[INFO] 
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO] ------------------------------------------------------------------------
[INFO] Apache Mahout ......................................... SUCCESS [1.797s]
[INFO] Mahout Build Tools .................................... SUCCESS [1.168s]
[INFO] Mahout Math ........................................... SUCCESS [7.442s]
[INFO] Mahout Core ........................................... SUCCESS [53:58.847s]
[INFO] Mahout Integration .................................... SUCCESS [1:16.147s]
[INFO] Mahout Examples ....................................... SUCCESS [1:13.287s]
[INFO] Mahout Release Package ................................ SUCCESS [0.007s]
[INFO] ------------------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 56 minutes 39 seconds
[INFO] Finished at: Sat May 12 12:54:59 EDT 2012
[INFO] Final Memory: 102M/645M
[INFO] ------------------------------------------------------------------------


4. 编译 eclipse

sudo mvn eclipse:eclipse

4.1 编译结果

...

[INFO] ------------------------------------------------------------------------
[INFO] Building Mahout Release Package
[INFO]    task-segment: [eclipse:eclipse]
[INFO] ------------------------------------------------------------------------
[INFO] Preparing eclipse:eclipse
[INFO] No goals needed for project - skipping
[INFO] [eclipse:eclipse {execution: default-cli}]
[INFO] Not running eclipse plugin goal for pom project
[INFO] Using Eclipse Workspace: null
[INFO] Adding default classpath container: org.eclipse.jdt.launching.JRE_CONTAINER
[INFO] 
[INFO] 
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO] ------------------------------------------------------------------------
[INFO] Apache Mahout ......................................... SUCCESS [14.802s]
[INFO] Mahout Build Tools .................................... SUCCESS [0.023s]
[INFO] Mahout Math ........................................... SUCCESS [0.210s]
[INFO] Mahout Core ........................................... SUCCESS [0.206s]
[INFO] Mahout Integration .................................... SUCCESS [1.922s]
[INFO] Mahout Examples ....................................... SUCCESS [0.117s]
[INFO] Mahout Release Package ................................ SUCCESS [0.006s]
[INFO] ------------------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 20 seconds
[INFO] Finished at: Sat May 12 15:19:51 EDT 2012
[INFO] Final Memory: 49M/341M
[INFO] ------------------------------------------------------------------------

ps.: 第一次编译的时候,发生了错误,后来发现是jdk不对,因为本机中有openjdk-7 和 openjdk-6 两个版本.

<think>我们正在Windows 11环境下使用VSCode和Python 3.11,目标是加载Qwen3-Embedding-0.6B和Qwen3-Rerank-0.6B模型,并创建兼容OpenAI的API端点。 根据引用[1]和引用[2]的信息,我们可以使用vLLM来部署模型,但注意引用[3]中提到了一个错误,提示需要安装vllm,并且引用[2]中展示了如何设置环境变量来使用本地模型。 然而,需要注意的是,Qwen3-Embedding和Qwen3-Rerank是嵌入模型和重排序模型,它们通常用于文本嵌入和检索任务,而不是通用的文本生成。因此,我们需要一个能够提供嵌入和重排序功能的API端点,并且要兼容OpenAI的API格式。 但是,vLLM主要针对生成式模型(如Qwen3-6B等)进行优化,可能不直接支持嵌入模型。因此,我们需要寻找其他方法。 我们可以考虑使用FastAPI来构建API,并使用Hugging Face的transformers库加载模型。同时,为了兼容OpenAI的API格式,我们可以参考OpenAI的API文档设计路由和请求/响应格式。 步骤: 1. 创建Python虚拟环境(推荐使用Python 3.11) 2. 安装必要的库:transformers, torch, fastapi, uvicorn, pydantic, sentencepiece等 3. 下载模型:从ModelScope或Hugging Face Hub下载Qwen3-Embedding-0.6B和Qwen3-Rerank-0.6B模型 4. 编写API代码,提供两个端点(一个用于嵌入,一个用于重排序)并确保其兼容OpenAI的嵌入端点格式(例如/v1/embeddings)和重排序格式(OpenAI没有标准重排序端点,但我们可以自定义,或参考其他兼容API如Cohere的格式) 5. 运行API服务 注意:由于重排序模型在OpenAI API中没有直接对应,我们可以将其设计为自定义端点,但也可以考虑将重排序功能通过嵌入端点以某种方式提供(比如通过输入两个文本,返回它们的相关性分数)。但为了清晰,建议分开。 具体实现思路: 嵌入端点: - 路径:/v1/embeddings - 方法:POST - 请求体:包含"input"(文本或文本列表)和"model"(指定模型名称,如"Qwen3-Embedding-0.6B") - 响应:按照OpenAI的嵌入响应格式,返回一个包含嵌入向量列表的对象。 重排序端点(自定义): - 路径:/v1/rerank - 方法:POST - 请求体:包含"query"(查询文本),"documents"(文档列表),以及可选的"model"(指定模型名称,如"Qwen3-Rerank-0.6B") - 响应:返回一个列表,每个文档有一个相关性分数,以及排序后的文档列表(可选)。 由于OpenAI的嵌入API只要求返回嵌入向量,不包含重排序功能,因此我们需要自定义重排序端点。 代码结构示例: 1. 初始化FastAPI应用 2. 加载嵌入模型和重排序模型(注意:这两个模型是独立的) 3. 定义请求和响应的Pydantic模型 4. 编写端点函数 但是,请注意,引用[2]中提到了使用vLLM来部署,但这里我们部署的是嵌入模型,不是生成模型,所以不使用vLLM(vLLM主要针对生成模型)。因此,我们直接使用transformers加载模型。 另外,引用[2]中设置的环境变量主要是为了OpenAI兼容的API,我们可以参考这个思路,但我们的API是自己实现的。 开始编写代码: 首先,确保已经安装所需的包。在VSCode的终端中,创建并激活虚拟环境,然后安装: pip install transformers torch fastapi uvicorn pydantic sentencepiece 然后,创建一个文件(比如main.py),编写以下代码:</think>在Windows 11环境下使用VSCode和Python 3.11部署Qwen3嵌入和重排序模型的步骤如下: ### 1. 环境准备 ```powershell # 创建虚拟环境 python -m venv qwen_env .\qwen_env\Scripts\activate # 安装核心依赖 pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121 pip install transformers sentencepiece accelerate fastapi uvicorn openai pydantic ``` ### 2. API服务实现(`api_server.py`) ```python from fastapi import FastAPI from pydantic import BaseModel from transformers import AutoModel, AutoTokenizer import torch app = FastAPI() # 加载模型 embed_model = AutoModel.from_pretrained( "Qwen/Qwen3-Embedding-0.6B", trust_remote_code=True ).cuda() rerank_model = AutoModel.from_pretrained( "Qwen/Qwen3-Rerank-0.6B", trust_remote_code=True ).cuda() tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen3-Embedding-0.6B") class EmbedRequest(BaseModel): input: str | list[str] model: str = "Qwen3-Embedding-0.6B" class RerankRequest(BaseModel): query: str documents: list[str] model: str = "Qwen3-Rerank-0.6B" @app.post("/v1/embeddings") async def embeddings(request: EmbedRequest): inputs = [request.input] if isinstance(request.input, str) else request.input encoded = tokenizer(inputs, padding=True, return_tensors="pt").to("cuda") with torch.no_grad(): outputs = embed_model(**encoded) embeddings = outputs.last_hidden_state.mean(dim=1).cpu().numpy().tolist() return {"data": [{"embedding": emb} for emb in embeddings]} @app.post("/v1/rerank") async def rerank(request: RerankRequest): scores = [] for doc in request.documents: encoded = tokenizer([request.query, doc], padding=True, return_tensors="pt").to("cuda") with torch.no_grad(): outputs = rerank_model(**encoded) scores.append(outputs.logits[0].item()) return {"results": sorted(zip(request.documents, scores), key=lambda x: x[1], reverse=True)} if __name__ == "__main__": import uvicorn uvicorn.run(app, host="0.0.0.0", port=8000) ``` ### 3. 启动服务 ```powershell python api_server.py ``` 服务启动后访问: - 嵌入端点:`http://localhost:8000/v1/embeddings` - 重排序端点:`http://localhost:8000/v1/rerank` ### 4. 客户端调用示例 ```python from openai import OpenAI client = OpenAI(base_url="http://localhost:8000/v1", api_key="none") # 获取嵌入向量 embed_response = client.embeddings.create( input="自然语言处理", model="Qwen3-Embedding-0.6B" ) print(f"嵌入维度: {len(embed_response.data[0].embedding)}") # 文档重排序 rerank_response = client.chat.completions.create( model="Qwen3-Rerank-0.6B", messages=[{ "role": "user", "content": json.dumps({ "query": "人工智能发展", "documents": [ "机器学习基础知识", "深度神经网络原理", "大模型技术演进" ] }) }] ) print("重排序结果:", json.loads(rerank_response.choices[0].message.content)) ``` ### 关键配置说明 1. **模型加载**: - 使用`trust_remote_code=True`启用Qwen特殊架构 - `.cuda()`启用GPU加速(需安装CUDA 12.1) - 首次运行会自动下载模型(约3.5GB) 2. **性能优化**: ```python # 添加在模型加载后 embed_model = torch.compile(embed_model) rerank_model = torch.compile(rerank_model) torch.set_float32_matmul_precision('high') # 加速矩阵运算 ``` 3. **资源管理**: - 默认使用GPU显存(需至少8GB) - 低显存设备可添加`.float()`转为FP32精度 - 或使用`.half()`转为FP16精度节省显存 ### 验证方法 使用curl测试端点: ```bash curl -X POST http://localhost:8000/v1/embeddings \ -H "Content-Type: application/json" \ -d '{"input": "测试文本", "model": "Qwen3-Embedding-0.6B"}' ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值