news 2026/9/4 2:19:06

大模型服务化部署实战:Ollama、vLLM与Ray Serve技术解析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
大模型服务化部署实战:Ollama、vLLM与Ray Serve技术解析

1. 大模型服务化部署的核心挑战与解决方案

在大模型技术快速发展的今天,如何将训练好的模型高效部署到生产环境成为开发者面临的关键挑战。传统的模型部署方式在处理大语言模型时遇到诸多瓶颈:显存占用高、推理速度慢、并发能力弱、资源利用率低等。针对这些问题,业界涌现出多种专门的大模型服务化解决方案。

Ollama、vLLM和Ray Serve是目前最受关注的三种部署工具,它们各有侧重:Ollama专注于本地化简易部署,vLLM优化推理性能和资源利用率,Ray Serve提供分布式服务框架。在实际项目中,开发者需要根据模型规模、硬件条件、性能要求和业务场景选择合适的方案。

本文将深入解析这三种工具的技术原理、部署流程和最佳实践,帮助读者掌握从单机部署到分布式扩展的完整技能链。无论你是个人开发者想要本地体验大模型,还是企业团队需要构建生产级AI服务,都能找到适合的实施方案。

2. Ollama:轻量级本地部署方案

2.1 Ollama核心特性与适用场景

Ollama是一个专为本地运行大语言模型设计的开源工具,它采用Go语言开发,支持macOS、Linux和Windows系统。Ollama最大的优势在于简化了模型部署流程,用户只需几条命令就能在本地启动各种开源大模型。

核心特性包括:

  • 自动模型下载和管理
  • 优化的本地推理引擎
  • RESTful API接口
  • 模型版本控制
  • 内存优化配置

适用场景:

  • 个人学习和开发测试
  • 小规模原型验证
  • 离线环境部署
  • 资源受限的本地环境

2.2 Ollama安装与配置详解

Linux/macOS安装:

# 使用官方脚本安装 curl -fsSL https://ollama.ai/install.sh | sh # 启动Ollama服务 ollama serve # 验证安装 ollama --version

Windows安装:对于Windows用户,建议使用WSL2环境部署,或者下载官方提供的Windows安装包。国内用户由于网络原因,直接从官网下载可能较慢,可以考虑使用镜像源。

国内镜像源加速配置:

# 设置环境变量使用国内镜像 export OLLAMA_HOST=0.0.0.0 export OLLAMA_ORIGINS=* # 或者使用中科大镜像 export OLLAMA_MODELS=https://mirrors.ustc.edu.cn/ollama/models/

自定义安装目录(解决C盘空间不足问题):

# Linux/macOS 设置自定义模型存储路径 export OLLAMA_MODELS=/path/to/your/models # Windows 通过环境变量设置 set OLLAMA_MODELS=D:\ollama\models

2.3 模型部署与管理实战

基础模型部署:

# 拉取并运行Llama2模型 ollama pull llama2 ollama run llama2 # 拉取CodeLlama代码模型 ollama pull codellama:7b

自定义模型配置:创建Modelfile文件来自定义模型参数:

FROM llama2:7b # 设置系统提示词 SYSTEM """你是一个有帮助的AI助手""" # 配置参数 PARAMETER temperature 0.7 PARAMETER top_k 40 PARAMETER top_p 0.9 # 模板设置 TEMPLATE """{{ .System }} 用户: {{ .Prompt }} 助手: """

创建自定义模型:

ollama create my-llama -f ./Modelfile ollama run my-llama

API接口使用示例:

import requests import json # 与Ollama API交互 def query_ollama(prompt, model="llama2"): url = "http://localhost:11434/api/generate" data = { "model": model, "prompt": prompt, "stream": False } response = requests.post(url, json=data) if response.status_code == 200: return response.json()["response"] else: raise Exception(f"API请求失败: {response.text}") # 使用示例 result = query_ollama("解释一下机器学习的基本概念") print(result)

2.4 Ollama常见问题与优化方案

下载速度慢的解决方案:

  1. 使用国内镜像源
  2. 配置HTTP代理(如需使用代理,请确保符合当地法律法规)
  3. 分时段下载(避开网络高峰)

内存优化配置:

# 限制GPU内存使用 ollama run llama2 --gpu-layers 20 # CPU模式运行(适合低配置设备) ollama run llama2 --cpu

模型更新与维护:

# 查看已安装模型 ollama list # 删除模型 ollama rm llama2 # 复制模型 ollama cp llama2 my-llama-backup

3. vLLM:高性能推理引擎

3.1 vLLM架构设计与性能优势

vLLM是加州大学伯克利分校推出的高性能LLM推理和服务引擎,其核心创新在于PagedAttention技术,有效解决了LLM服务中的内存碎片化和利用率低的问题。

核心技术特点:

  • PagedAttention:类似操作系统虚拟内存的分页机制
  • 连续批处理:动态合并推理请求
  • 内存优化:显著降低显存占用
  • 高吞吐量:支持大规模并发

性能对比优势:

  • 比HuggingFace Transformers快24倍
  • 内存效率提升3-5倍
  • 支持数千并发请求

3.2 vLLM环境搭建与部署

基础环境要求:

  • Python 3.8+
  • CUDA 11.0+(GPU版本)
  • 至少8GB显存(推荐16GB+)

安装vLLM:

# 使用pip安装最新版本 pip install vllm # 或者从源码安装 git clone https://github.com/vllm-project/vllm.git cd vllm pip install -e . # 安装特定版本 pip install vllm==0.3.2

离线安装方案:对于内网环境或网络受限场景,可以预先下载依赖包:

# 在有网络的环境下载所有依赖 pip download vllm -d ./vllm-packages # 在内网环境离线安装 pip install --no-index --find-links=./vllm-packages vllm

Docker部署:

# Dockerfile示例 FROM nvidia/cuda:11.8-devel-ubuntu20.04 # 安装系统依赖 RUN apt-get update && apt-get install -y \ python3.10 \ python3-pip \ && rm -rf /var/lib/apt/lists/* # 安装vLLM RUN pip3 install vllm # 启动服务 CMD ["python3", "-m", "vllm.entrypoints.openai.api_server", \ "--host", "0.0.0.0", "--port", "8000", \ "--model", "Qwen/Qwen2.5-Coder-32B-Instruct"]

构建并运行:

docker build -t vllm-server . docker run --gpus all -p 8000:8000 vllm-server

3.3 模型部署实战:以Qwen2.5为例

基础模型部署:

from vllm import LLM, SamplingParams # 初始化模型 llm = LLM( model="Qwen/Qwen2.5-Coder-32B-Instruct", tensor_parallel_size=2, # 多GPU并行 gpu_memory_utilization=0.9, # GPU内存利用率 max_model_len=8192 # 最大上下文长度 ) # 配置采样参数 sampling_params = SamplingParams( temperature=0.8, top_p=0.95, max_tokens=1024 ) # 批量推理 prompts = [ "写一个Python函数计算斐波那契数列", "解释JavaScript中的闭包概念" ] outputs = llm.generate(prompts, sampling_params) for output in outputs: print(f"Prompt: {output.prompt}") print(f"Generated text: {output.outputs[0].text}") print("-" * 50)

OpenAI兼容API服务:启动API服务器:

python -m vllm.entrypoints.openai.api_server \ --model Qwen/Qwen2.5-Coder-32B-Instruct \ --served-model-name qwen-coder \ --host 0.0.0.0 \ --port 8000 \ --tensor-parallel-size 2

客户端调用示例:

from openai import OpenAI # 配置客户端 client = OpenAI( base_url="http://localhost:8000/v1", api_key="token-abc123" # vLLM需要任意API key ) # 调用聊天接口 response = client.chat.completions.create( model="qwen-coder", messages=[ {"role": "user", "content": "写一个快速排序算法"} ], temperature=0.7, max_tokens=1000 ) print(response.choices[0].message.content)

3.4 高级配置与性能优化

多GPU配置:

# 针对多GPU环境的优化配置 llm = LLM( model="Qwen/Qwen2.5-Coder-32B-Instruct", tensor_parallel_size=4, # 4卡并行 pipeline_parallel_size=1, worker_use_ray=True, # 使用Ray进行分布式推理 max_parallel_loading_workers=4 )

CPU模式部署:对于没有GPU的环境,vLLM支持纯CPU推理:

python -m vllm.entrypoints.openai.api_server \ --model Qwen/Qwen2.5-Coder-32B-Instruct \ --device cpu \ --host 0.0.0.0 \ --port 8000

量化模型部署:

# 部署4位量化模型 llm = LLM( model="Qwen/Qwen2.5-Coder-32B-Instruct-q4_k_m.gguf", quantization="awq", # 激活感知权重量化 gpu_memory_utilization=0.8 )

4. Ray Serve:分布式模型服务框架

4.1 Ray Serve架构概述

Ray Serve是基于Ray的可扩展模型服务框架,专门设计用于部署和扩展机器学习模型。它提供了灵活的API来构建复杂的推理流水线,支持自动扩缩容、流量管理、灰度发布等生产级特性。

核心组件:

  • Deployment:服务部署的基本单元
  • Router:请求路由和负载均衡
  • Replica:服务副本,支持水平扩展
  • HTTP Proxy:HTTP请求处理网关

优势特性:

  • 原生分布式支持
  • 自动扩缩容
  • 金丝雀发布
  • 复杂的推理图

4.2 Ray Serve环境搭建

安装Ray和Ray Serve:

# 安装完整套件 pip install "ray[serve]" # 或者最小化安装 pip install ray-core ray-serve # 验证安装 python -c "import ray; import ray.serve; print('安装成功')"

基础服务部署:

from ray import serve from transformers import pipeline # 定义服务部署 @serve.deployment(num_replicas=2, ray_actor_options={"num_gpus": 1}) class TextGenerationDeployment: def __init__(self): self.model = pipeline( "text-generation", model="Qwen/Qwen2.5-Coder-7B-Instruct", device=0 ) def generate(self, prompt: str) -> str: result = self.model( prompt, max_length=512, temperature=0.7, do_sample=True ) return result[0]["generated_text"] # 部署服务 app = TextGenerationDeployment.bind()

启动服务:

# 命令行启动 serve run my_script:app # 或者编程方式启动 import ray ray.init() serve.run(app)

4.3 集成vLLM与Ray Serve

构建高性能推理服务:

from ray import serve from vllm import SamplingParams import asyncio @serve.deployment( num_replicas=2, ray_actor_options={"num_gpus": 1}, autoscaling_config={ "min_replicas": 1, "max_replicas": 4, "target_num_ongoing_requests_per_replica": 10 } ) class VLLMDeployment: def __init__(self, model_name: str): from vllm import LLM self.llm = LLM(model=model_name) self.sampling_params = SamplingParams( temperature=0.7, top_p=0.95, max_tokens=1024 ) async def generate(self, prompt: str) -> str: outputs = self.llm.generate([prompt], self.sampling_params) return outputs[0].outputs[0].text async def batch_generate(self, prompts: list) -> list: outputs = self.llm.generate(prompts, self.sampling_params) return [output.outputs[0].text for output in outputs] # 部署配置 app = VLLMDeployment.bind("Qwen/Qwen2.5-Coder-7B-Instruct")

复杂推理流水线:

from ray import serve from typing import List, Dict @serve.deployment class Preprocessor: def preprocess(self, text: str) -> Dict: # 文本预处理逻辑 return {"processed_text": text.strip()} @serve.deployment class Postprocessor: def postprocess(self, result: str) -> Dict: # 结果后处理 return {"response": result, "status": "success"} @serve.deployment class Orchestrator: def __init__(self, preprocessor, vllm_deployment, postprocessor): self.preprocessor = preprocessor self.vllm_deployment = vllm_deployment self.postprocessor = postprocessor async def process(self, input_text: str) -> Dict: # 完整的处理流水线 preprocessed = await self.preprocessor.preprocess.remote(input_text) generated = await self.vllm_deployment.generate.remote(preprocessed["processed_text"]) final_result = await self.postprocessor.postprocess.remote(generated) return final_result # 构建完整的服务图 preprocessor = Preprocessor.bind() vllm_deployment = VLLMDeployment.bind("Qwen/Qwen2.5-Coder-7B-Instruct") postprocessor = Postprocessor.bind() app = Orchestrator.bind(preprocessor, vllm_deployment, postprocessor)

5. 生产环境部署最佳实践

5.1 性能优化策略

资源分配优化:

# vLLM资源优化配置 llm = LLM( model="Qwen/Qwen2.5-Coder-32B-Instruct", gpu_memory_utilization=0.85, # 平衡内存使用和性能 max_num_seqs=256, # 最大并发序列数 max_num_batched_tokens=4096, # 批处理token数 enable_prefix_caching=True # 启用前缀缓存 )

批处理优化:

# 动态批处理配置 sampling_params = SamplingParams( temperature=0.7, top_p=0.9, frequency_penalty=0.1, presence_penalty=0.1, ignore_eos=False, # 不忽略结束标记 skip_special_tokens=True # 跳过特殊token )

5.2 监控与日志管理

健康检查配置:

from ray import serve import time @serve.deployment class HealthCheckDeployment: def __init__(self): self.start_time = time.time() def health(self) -> Dict: return { "status": "healthy", "uptime": time.time() - self.start_time, "timestamp": time.time() } # 集成健康检查 app = HealthCheckDeployment.bind()

性能监控指标:

from prometheus_client import Counter, Histogram, generate_latest # 定义监控指标 REQUEST_COUNT = Counter('request_total', 'Total requests') REQUEST_LATENCY = Histogram('request_latency_seconds', 'Request latency') @serve.deployment class MonitoredDeployment: def __init__(self): self.model = LLM(model="Qwen/Qwen2.5-Coder-7B-Instruct") @REQUEST_LATENCY.time() async def generate(self, prompt: str) -> str: REQUEST_COUNT.inc() outputs = self.model.generate([prompt]) return outputs[0].outputs[0].text

5.3 安全与权限控制

API认证中间件:

from ray import serve from fastapi import HTTPException, Depends from fastapi.security import HTTPBearer security = HTTPBearer() @serve.deployment class SecureDeployment: def __init__(self): self.model = LLM(model="Qwen/Qwen2.5-Coder-7B-Instruct") self.valid_tokens = {"secret-token-123"} async def generate(self, prompt: str, token: str = Depends(security)) -> str: if token.credentials not in self.valid_tokens: raise HTTPException(status_code=401, detail="Invalid token") outputs = self.model.generate([prompt]) return outputs[0].outputs[0].text

输入验证与过滤:

import re from ray import serve @serve.deployment class SanitizedDeployment: def __init__(self): self.model = LLM(model="Qwen/Qwen2.5-Coder-7B-Instruct") self.sensitive_patterns = [ r"password.*=.*", r"token.*=.*", r"secret.*=.*" ] def sanitize_input(self, text: str) -> str: for pattern in self.sensitive_patterns: text = re.sub(pattern, "[REDACTED]", text, flags=re.IGNORECASE) return text async def generate(self, prompt: str) -> str: sanitized_prompt = self.sanitize_input(prompt) outputs = self.model.generate([sanitized_prompt]) return outputs[0].outputs[0].text

6. 企业级部署方案

6.1 高可用架构设计

多节点集群配置:

# Ray集群配置 ray.init(address="auto") # 自动发现集群节点 @serve.deployment( num_replicas=4, ray_actor_options={"num_gpus": 1}, max_concurrent_queries=100 ) class ClusterDeployment: def __init__(self, model_path: str): self.llm = LLM(model=model_path) async def generate(self, prompt: str) -> str: outputs = self.llm.generate([prompt]) return outputs[0].outputs[0].text # 在不同节点上部署 serve.run(ClusterDeployment.bind("Qwen/Qwen2.5-Coder-32B-Instruct"))

负载均衡配置:

from ray import serve from ray.serve.handle import DeploymentHandle @serve.deployment class LoadBalancer: def __init__(self, deployments: List[DeploymentHandle]): self.deployments = deployments self.current_index = 0 async def route_request(self, prompt: str) -> str: # 轮询负载均衡 deployment = self.deployments[self.current_index] self.current_index = (self.current_index + 1) % len(self.deployments) return await deployment.generate.remote(prompt)

6.2 模型版本管理与灰度发布

金丝雀发布策略:

from ray import serve from ray.serve.handle import DeploymentHandle @serve.deployment(route_prefix="/v1") class ModelRouter: def __init__(self, v1_deployment: DeploymentHandle, v2_deployment: DeploymentHandle): self.v1 = v1_deployment self.v2 = v2_deployment self.canary_percentage = 0.1 # 10%流量到新版本 async def generate(self, prompt: str, user_id: str) -> str: import random # 基于用户ID的确定性路由 if hash(user_id) % 100 < self.canary_percentage * 100: return await self.v2.generate.remote(prompt) else: return await self.v1.generate.remote(prompt) # 版本管理部署 v1_app = VLLMDeployment.bind("Qwen/Qwen2.5-Coder-7B-Instruct-v1") v2_app = VLLMDeployment.bind("Qwen/Qwen2.5-Coder-7B-Instruct-v2") router_app = ModelRouter.bind(v1_app, v2_app)

6.3 成本优化与资源管理

自动扩缩容配置:

@serve.deployment( autoscaling_config={ "min_replicas": 1, "max_replicas": 10, "target_num_ongoing_requests_per_replica": 5, "metrics_interval_s": 10, "look_back_period_s": 30 } ) class AutoScalingDeployment: def __init__(self): self.llm = LLM(model="Qwen/Qwen2.5-Coder-7B-Instruct") async def generate(self, prompt: str) -> str: outputs = self.llm.generate([prompt]) return outputs[0].outputs[0].text

混合精度推理:

# 使用混合精度节省显存 llm = LLM( model="Qwen/Qwen2.5-Coder-32B-Instruct", quantization="awq", enforce_eager=True, # 禁用图优化以节省内存 max_context_len_to_capture=8192 )

7. 故障排查与性能调优

7.1 常见问题诊断

内存不足问题排查:

# 内存监控工具 import psutil import GPUtil def check_system_resources(): # 检查系统内存 memory = psutil.virtual_memory() print(f"内存使用率: {memory.percent}%") # 检查GPU内存 gpus = GPUtil.getGPUs() for gpu in gpus: print(f"GPU {gpu.id}: {gpu.memoryUtil*100:.1f}% 使用率") # 在服务启动前检查资源 check_system_resources()

推理性能分析:

import time from vllm import LLM class ProfiledLLM: def __init__(self, model_name: str): self.llm = LLM(model=model_name) self.latencies = [] def generate_with_profile(self, prompt: str) -> str: start_time = time.time() outputs = self.llm.generate([prompt]) latency = time.time() - start_time self.latencies.append(latency) print(f"推理延迟: {latency:.3f}s") print(f"平均延迟: {sum(self.latencies)/len(self.latencies):.3f}s") return outputs[0].outputs[0].text

7.2 性能调优指南

vLLM参数调优:

# 针对不同硬件配置的优化参数 optimization_profiles = { "high_memory_gpu": { "gpu_memory_utilization": 0.95, "max_num_seqs": 512, "max_num_batched_tokens": 8192 }, "low_memory_gpu": { "gpu_memory_utilization": 0.8, "max_num_seqs": 128, "max_num_batched_tokens": 2048 }, "cpu_only": { "device": "cpu", "swap_space": 16 # GB } } # 根据硬件选择配置 def get_optimized_config(device_type: str) -> dict: return optimization_profiles.get(device_type, optimization_profiles["high_memory_gpu"])

批处理策略优化:

from vllm import AsyncLLMEngine import asyncio class OptimizedBatchProcessor: def __init__(self, model_name: str): self.engine = AsyncLLMEngine.from_engine_args( model_name=model_name, max_num_seqs=256, max_num_batched_tokens=4096 ) async def process_batch(self, prompts: list) -> list: # 动态批处理优化 results = [] batch_size = 8 # 根据硬件调整 for i in range(0, len(prompts), batch_size): batch = prompts[i:i+batch_size] batch_results = await asyncio.gather(*[ self.engine.generate(prompt) for prompt in batch ]) results.extend(batch_results) return results

8. 实际项目集成案例

8.1 代码生成服务集成

VSCode插件集成Ollama:

# vscode-ollama-integration.py import requests import json class VSCodeOllamaClient: def __init__(self, base_url: str = "http://localhost:11434"): self.base_url = base_url def generate_code(self, prompt: str, language: str = "python") -> str: """为VSCode插件提供代码生成服务""" enhanced_prompt = f""" 你是一个专业的{language}程序员。请根据以下需求生成高质量的代码: 需求:{prompt} 要求: 1. 代码要符合{language}最佳实践 2. 添加必要的注释 3. 考虑错误处理 4. 代码要完整可运行 只返回代码,不要额外解释。 """ response = requests.post( f"{self.base_url}/api/generate", json={ "model": "codellama:7b", "prompt": enhanced_prompt, "stream": False } ) if response.status_code == 200: return response.json()["response"] else: raise Exception(f"代码生成失败: {response.text}") # 使用示例 client = VSCodeOllamaClient() python_code = client.generate_code("实现一个快速排序函数", "python") print(python_code)

8.2 企业内部知识库问答系统

基于vLLM的企业级问答服务:

from vllm import LLM from typing import List, Dict import json class EnterpriseQASystem: def __init__(self, model_path: str, knowledge_base: Dict): self.llm = LLM(model=model_path) self.knowledge_base = knowledge_base def retrieve_relevant_info(self, question: str) -> str: """检索相关知识库信息""" # 简单的关键词匹配检索(实际项目可用向量数据库) relevant_info = [] question_lower = question.lower() for key, content in self.knowledge_base.items(): if any(word in question_lower for word in key.lower().split()): relevant_info.append(f"{key}: {content}") return "\n".join(relevant_info) if relevant_info else "暂无相关信息" def generate_answer(self, question: str) -> Dict: """生成基于知识库的答案""" context = self.retrieve_relevant_info(question) prompt = f""" 基于以下企业知识库信息回答问题。如果信息不足,请明确说明。 知识库信息: {context} 问题:{question} 请提供准确、专业的回答。 """ outputs = self.llm.generate([prompt]) answer = outputs[0].outputs[0].text return { "question": question, "answer": answer, "sources": context.split('\n') if context else [], "timestamp": datetime.now().isoformat() } # 初始化知识库 knowledge_base = { "请假流程": "员工需提前3天在OA系统提交请假申请,经部门经理审批后生效。", "报销政策": "每月10日前提交上月报销单据,单笔超过5000元需财务总监审批。", "网络安全": "所有员工必须定期修改密码,禁止使用公共WiFi处理公司敏感信息。" } qa_system = EnterpriseQASystem("Qwen/Qwen2.5-Coder-7B-Instruct", knowledge_base) result = qa_system.generate_answer("请假需要提前多久申请?") print(json.dumps(result, indent=2, ensure_ascii=False))

本文详细介绍了Ollama、vLLM和Ray Serve三种主流的大模型部署方案,涵盖了从本地开发到企业级生产的完整技术栈。每种工具都有其独特的优势和适用场景,在实际项目中可以根据具体需求进行选择和组合使用。

对于刚接触大模型部署的开发者,建议从Ollama开始,逐步过渡到vLLM进行性能优化,最后使用Ray Serve构建分布式生产系统。记住,成功的部署不仅仅是技术实现,更需要考虑性能、安全、成本和可维护性的平衡。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/4 2:17:58

从零构建航拍屋顶识别数据集:YOLOv8训练实战与应用解析

简介&#xff1a;本资源是面向深度学习目标检测任务的航拍屋顶识别专用数据集&#xff0c;适用于YOLO系列&#xff08;v5至v10&#xff09;、Faster R-CNN、SSD等主流模型的训练与验证&#xff0c;特别适合计算机视觉初学者及遥感图像分析方向的研究者开展屋顶定位、城市建筑密…

作者头像 李华
网站建设 2026/9/4 2:15:54

医学AI入门实战:血细胞图像分类全流程解析与数据增强策略

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/4 2:14:06

压缩感知SAR成像:突破奈奎斯特瓶颈的工程化实践

简介&#xff1a;本资源是一份面向雷达信号处理与遥感成像方向研究生、科研人员及算法工程师的MATLAB实现方案&#xff0c;聚焦压缩感知理论在SAR成像中的实际应用&#xff0c;旨在解决传统SAR系统采样率高、数据量大、存储与计算负担重等核心问题。压缩包仅含1个.m源文件&…

作者头像 李华
网站建设 2026/9/4 2:10:48

开源模型DeepSeek V4 Pro引热议:本地部署与跑分真相解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/4 2:09:35

Python定向爬虫构建商品比价系统实战

简介&#xff1a;本资源是一份面向计算机专业本科生的毕业设计实践项目&#xff0c;聚焦Python网络爬虫与电商数据比价应用&#xff0c;解决消费者跨平台比价难、信息获取效率低的实际问题。压缩包共16个文件&#xff0c;含10个核心Python源码&#xff08;涵盖爬虫spider.py、G…

作者头像 李华