16GB内存运行110B大模型:GLM-4.5-Air量化部署实战指南
在16GB内存消费级机器上运行GLM-4.5-Air(110B)的完整实战指南最近大语言模型的应用越来越广泛但像GLM-4.5-Air这样的110B参数大模型通常需要数百GB显存让很多开发者望而却步。本文将分享一套在普通16GB内存消费级机器上运行110B参数大模型的完整方案涵盖原理分析、环境搭建、优化技巧和实战演示。无论你是学生、研究者还是开发者只要有一台配备16GB内存的普通电脑都能通过本文的方法体验最新的大模型能力。本文将详细拆解内存优化、模型量化、推理加速等关键技术并提供可复现的代码示例。1. GLM-4.5-Air模型与技术背景1.1 GLM系列模型概述GLMGeneral Language Model是智谱AI开发的大语言模型系列采用通用的自回归填空预训练框架。GLM-4.5-Air是该系列的最新版本之一参数量达到1100亿110B在多项自然语言处理任务上表现出色。与传统的GPT系列模型不同GLM采用双向注意力机制和自回归填空目标既能理解上下文又能生成连贯文本。这种架构使其在理解长文档、代码生成和逻辑推理等任务上具有独特优势。1.2 大模型运行的内存挑战运行110B参数的大模型面临严峻的内存挑战。以FP16精度计算110B参数需要约220GB显存这远远超过消费级显卡的能力。即使在CPU上运行也需要考虑系统内存的限制。核心挑战包括参数存储模型权重需要大量内存空间激活内存前向传播过程中的中间结果占用推理上下文长序列处理需要更多内存硬件限制消费级设备内存有限1.3 内存优化技术原理为了在有限内存条件下运行大模型需要采用多种优化技术量化技术将模型权重从高精度如FP16转换为低精度如INT8/INT4显著减少内存占用。例如INT4量化可以将内存需求降低到原来的1/4。分层加载不一次性加载整个模型而是按需加载当前计算需要的层减少峰值内存使用。内存交换利用系统交换空间或NVMe SSD作为扩展内存虽然速度较慢但可以突破物理内存限制。2. 环境准备与工具选择2.1 硬件要求与配置建议虽然标题提到16GB内存但为了更好的体验建议以下配置最低配置CPUIntel i7或AMD Ryzen 7以上支持AVX2指令集内存16GB DDR4存储至少50GB可用空间的SSD操作系统Linux Ubuntu 18.04或Windows 10推荐配置CPU多核心处理器16核以上内存32GB或以上存储NVMe SSD200GB可用空间可选具有8GB显存的GPU用于加速2.2 软件环境搭建首先安装必要的依赖包# 创建Python虚拟环境 python -m venv glm-env source glm-env/bin/activate # Linux/Mac # glm-env\Scripts\activate # Windows # 安装核心依赖 pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu pip install transformers4.30.0 pip install accelerate0.20.0 pip install bitsandbytes0.40.0 pip install safetensors2.3 模型下载与准备由于GLM-4.5-Air是较新的模型可能需要通过特定渠道获取from huggingface_hub import snapshot_download import os # 创建模型缓存目录 model_cache_dir ./models/glm-4.5-air os.makedirs(model_cache_dir, exist_okTrue) # 下载模型需要合适的访问权限 try: snapshot_download( THUDM/glm-4.5-air, cache_dirmodel_cache_dir, local_dir./glm-4.5-air-local ) print(模型下载成功) except Exception as e: print(f模型下载失败: {e}) print(请检查访问权限或从其他渠道获取模型文件)3. 内存优化核心技术实现3.1 模型量化配置量化是减少内存占用的关键技术以下是完整的量化配置示例import torch from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig # 配置4位量化 bnb_config BitsAndBytesConfig( load_in_4bitTrue, bnb_4bit_use_double_quantTrue, # 嵌套量化进一步压缩 bnb_4bit_quant_typenf4, # 正态浮点4位量化 bnb_4bit_compute_dtypetorch.float16, llm_int8_enable_fp32_cpu_offloadTrue, # CPU卸载 ) # 加载量化模型 def load_quantized_model(model_path): tokenizer AutoTokenizer.from_pretrained( model_path, trust_remote_codeTrue ) model AutoModelForCausalLM.from_pretrained( model_path, quantization_configbnb_config, device_mapauto, # 自动设备映射 torch_dtypetorch.float16, trust_remote_codeTrue, low_cpu_mem_usageTrue # 低CPU内存使用模式 ) return model, tokenizer3.2 分层加载与内存管理对于超大模型需要精细的内存管理策略from accelerate import infer_auto_device_map, dispatch_model def optimize_device_mapping(model, max_memoryNone): if max_memory is None: # 默认内存分配为16GB系统优化 max_memory { 0: 4GB, # GPU 0如果有 cpu: 12GB # 系统内存 } # 自动计算设备映射 device_map infer_auto_device_map( model, max_memorymax_memory, no_split_module_classesmodel._no_split_modules ) # 分发模型到不同设备 model dispatch_model(model, device_mapdevice_map) return model # 使用示例 model, tokenizer load_quantized_model(./glm-4.5-air-local) model optimize_device_mapping(model)3.3 推理时内存优化在推理过程中进一步优化内存使用class MemoryEfficientInference: def __init__(self, model, tokenizer): self.model model self.tokenizer tokenizer self.max_length 2048 # 最大生成长度 def generate_text(self, prompt, max_new_tokens512): # 编码输入 inputs self.tokenizer( prompt, return_tensorspt, truncationTrue, max_lengthself.max_length - max_new_tokens ) # 使用内存友好的生成配置 with torch.inference_mode(): outputs self.model.generate( **inputs, max_new_tokensmax_new_tokens, do_sampleTrue, temperature0.7, top_p0.9, pad_token_idself.tokenizer.eos_token_id, repetition_penalty1.1, early_stoppingTrue ) # 解码输出 generated_text self.tokenizer.decode( outputs[0], skip_special_tokensTrue ) # 清理中间变量释放内存 del inputs, outputs if torch.cuda.is_available(): torch.cuda.empty_cache() return generated_text4. 完整实战演示4.1 基础对话功能实现下面实现一个完整的大模型对话应用import threading import time from queue import Queue class GLMChatBot: def __init__(self, model_path): print(正在加载模型...) self.model, self.tokenizer load_quantized_model(model_path) self.inference_engine MemoryEfficientInference(self.model, self.tokenizer) self.conversation_history [] def chat(self, user_input, max_tokens256): # 构建对话上下文 context self._build_context(user_input) try: start_time time.time() response self.inference_engine.generate_text( context, max_new_tokensmax_tokens ) end_time time.time() # 提取新生成的回复 new_response response[len(context):].strip() # 更新对话历史 self.conversation_history.append({ user: user_input, assistant: new_response, time: end_time - start_time }) return new_response except RuntimeError as e: if out of memory in str(e).lower(): return 内存不足请简化输入或重启应用 else: return f生成错误: {e} def _build_context(self, new_input): 构建对话上下文控制长度避免内存溢出 context # 只保留最近3轮对话以控制内存使用 recent_history self.conversation_history[-3:] if len(self.conversation_history) 3 else self.conversation_history for turn in recent_history: context f用户: {turn[user]}\n助手: {turn[assistant]}\n context f用户: {new_input}\n助手: return context # 使用示例 def main(): bot GLMChatBot(./glm-4.5-air-local) while True: user_input input(\n您: ) if user_input.lower() in [退出, exit, quit]: break print(GLM: 思考中...) response bot.chat(user_input) print(fGLM: {response}) if __name__ __main__: main()4.2 代码生成与解释功能GLM-4.5-Air在代码相关任务上表现优异class CodeAssistant: def __init__(self, chat_bot): self.bot chat_bot def generate_code(self, description, languagepython): prompt f请用{language}编写代码实现以下功能 {description} 要求 1. 代码要完整可运行 2. 添加必要的注释 3. 考虑边界情况和错误处理 代码 return self.bot.chat(prompt, max_tokens1024) def explain_code(self, code_snippet): prompt f请解释以下代码的功能和工作原理 python {code_snippet}解释return self.bot.chat(prompt)使用示例def test_code_generation(): bot GLMChatBot(./glm-4.5-air-local) code_assistant CodeAssistant(bot)# 生成快速排序代码 description 实现快速排序算法包含分区函数和递归排序 code code_assistant.generate_code(description) print(生成的代码) print(code) # 解释代码 explanation code_assistant.explain_code(code) print(\n代码解释) print(explanation)### 4.3 内存监控与优化 实时监控内存使用情况确保系统稳定 python import psutil import GPUtil import time class MemoryMonitor: def __init__(self, check_interval5): self.check_interval check_interval self.memory_threshold 0.85 # 85%内存使用阈值 self.is_monitoring False def get_memory_info(self): 获取系统内存信息 memory psutil.virtual_memory() gpus GPUtil.getGPUs() if GPUtil.getGPUs() else [] info { system_total: memory.total / (1024**3), # GB system_used: memory.used / (1024**3), system_available: memory.available / (1024**3), system_percent: memory.percent, gpus: [] } for gpu in gpus: info[gpus].append({ id: gpu.id, name: gpu.name, memory_total: gpu.memoryTotal, memory_used: gpu.memoryUsed, memory_free: gpu.memoryFree }) return info def start_monitoring(self, callbackNone): 开始监控内存使用 self.is_monitoring True def monitor_loop(): while self.is_monitoring: memory_info self.get_memory_info() # 检查内存使用是否超过阈值 if memory_info[system_percent] self.memory_threshold * 100: warning_msg f内存使用过高: {memory_info[system_percent]}% if callback: callback(warning_msg, memory_info) else: print(f警告: {warning_msg}) time.sleep(self.check_interval) # 在后台线程中运行监控 monitor_thread threading.Thread(targetmonitor_loop) monitor_thread.daemon True monitor_thread.start() def stop_monitoring(self): 停止监控 self.is_monitoring False # 集成到聊天机器人中 class OptimizedGLMChatBot(GLMChatBot): def __init__(self, model_path): super().__init__(model_path) self.memory_monitor MemoryMonitor() self.setup_memory_management() def setup_memory_management(self): def memory_warning_callback(warning, info): print(f内存警告: {warning}) # 自动清理策略 self.cleanup_memory() self.memory_monitor.start_monitoring(memory_warning_callback) def cleanup_memory(self): 内存清理策略 # 清理对话历史保留最近2轮 if len(self.conversation_history) 2: self.conversation_history self.conversation_history[-2:] # 清理PyTorch缓存 if torch.cuda.is_available(): torch.cuda.empty_cache() # 强制垃圾回收 import gc gc.collect() print(内存清理完成)5. 性能优化与调参技巧5.1 推理速度优化在有限硬件上提升推理速度def optimize_inference_settings(): 返回针对不同硬件的最优推理设置 hardware_configs { low_memory_cpu: { max_length: 1024, batch_size: 1, use_cache: True, num_beams: 1, early_stopping: True }, medium_memory_with_gpu: { max_length: 2048, batch_size: 2, use_cache: True, num_beams: 2, early_stopping: True }, high_memory_optimized: { max_length: 4096, batch_size: 4, use_cache: True, num_beams: 4, early_stopping: False } } # 根据可用内存自动选择配置 memory_info psutil.virtual_memory() available_gb memory_info.available / (1024**3) if available_gb 8: return hardware_configs[low_memory_cpu] elif available_gb 16: return hardware_configs[medium_memory_with_gpu] else: return hardware_configs[high_memory_optimized]5.2 模型分片与流水线并行对于超大模型采用分片策略from transformers import pipeline def create_optimized_pipeline(model_path): 创建优化的模型流水线 # 配置设备映射和分片策略 device_map { transformer.embedding: 0, transformer.layers.0: 0, transformer.layers.1: 0, # ... 分层分配确保内存平衡 transformer.layers.20: cpu, transformer.layers.21: cpu, lm_head: cpu } pipe pipeline( text-generation, modelmodel_path, device_mapdevice_map, torch_dtypetorch.float16, model_kwargs{ load_in_4bit: True, low_cpu_mem_usage: True } ) return pipe6. 常见问题与解决方案6.1 内存不足错误处理问题现象可能原因解决方案CUDA out of memoryGPU显存不足使用CPU模式、减小batch size、启用量化System memory exhausted系统内存不足启用交换空间、清理缓存、减少序列长度加载模型时崩溃模型太大无法加载使用分层加载、检查点加载6.2 性能优化问题排查def diagnose_performance_issues(): 性能问题诊断工具 issues [] # 检查CPU使用率 cpu_percent psutil.cpu_percent(interval1) if cpu_percent 90: issues.append(fCPU使用率过高: {cpu_percent}%) # 检查内存使用 memory psutil.virtual_memory() if memory.percent 85: issues.append(f内存使用率过高: {memory.percent}%) # 检查磁盘IO disk_io psutil.disk_io_counters() if disk_io and disk_io.read_count 1000: # 高频磁盘读取 issues.append(检测到高频磁盘读取可能在使用交换空间) # 检查PyTorch配置 if not torch.backends.cudnn.enabled: issues.append(CuDNN未启用可能影响GPU性能) return issues # 自动优化建议 def get_optimization_suggestions(issues): suggestions [] for issue in issues: if CPU使用率过高 in issue: suggestions.append(考虑减少并行任务或升级CPU) elif 内存使用率过高 in issue: suggestions.append(启用模型量化或增加物理内存) elif 磁盘读取 in issue: suggestions.append(考虑使用更快的SSD或增加内存减少交换) elif CuDNN in issue: suggestions.append(安装CUDA工具包并启用CuDNN) return suggestions6.3 模型加载失败排查模型加载失败的常见原因和解决方案def troubleshoot_model_loading(model_path): 模型加载问题排查 print(开始模型加载问题排查...) # 1. 检查模型文件是否存在 if not os.path.exists(model_path): print(f错误: 模型路径不存在: {model_path}) return False # 2. 检查文件完整性 required_files [config.json, pytorch_model.bin, tokenizer.json] missing_files [] for file in required_files: file_path os.path.join(model_path, file) if not os.path.exists(file_path): missing_files.append(file) if missing_files: print(f错误: 缺少必要文件: {missing_files}) return False # 3. 检查文件大小 model_file os.path.join(model_path, pytorch_model.bin) file_size os.path.getsize(model_file) / (1024**3) # GB available_memory psutil.virtual_memory().available / (1024**3) if file_size available_memory * 0.8: # 文件大小超过可用内存的80% print(f警告: 模型文件({file_size:.1f}GB)可能超过可用内存({available_memory:.1f}GB)) print(建议使用量化版本或增加内存) # 4. 测试tokenizer加载 try: tokenizer AutoTokenizer.from_pretrained(model_path, trust_remote_codeTrue) print(Tokenizer加载成功) except Exception as e: print(fTokenizer加载失败: {e}) return False # 5. 尝试最小化加载 try: # 使用最小配置尝试加载 model AutoModelForCausalLM.from_pretrained( model_path, torch_dtypetorch.float16, low_cpu_mem_usageTrue, trust_remote_codeTrue, device_mapcpu ) print(模型最小化加载成功) return True except Exception as e: print(f模型加载失败: {e}) return False7. 生产环境最佳实践7.1 安全性与稳定性考虑在生产环境中运行大模型需要注意内存安全监控class ProductionMemoryGuard: def __init__(self, memory_limit_gb14): # 为系统保留2GB self.memory_limit memory_limit_gb * (1024**3) # 转换为字节 self.emergency_cleanup_threshold 0.9 # 90%内存使用时紧急清理 def check_memory_safety(self): 检查内存安全性 memory psutil.virtual_memory() if memory.used self.memory_limit: return False, f内存使用超过安全限制: {memory.used/(1024**3):.1f}GB {self.memory_limit/(1024**3):.1f}GB if memory.percent self.emergency_cleanup_threshold * 100: return False, f内存使用接近危险阈值: {memory.percent}% return True, 内存使用正常 def emergency_cleanup(self): 紧急内存清理 print(执行紧急内存清理...) # 强制清理PyTorch缓存 if torch.cuda.is_available(): torch.cuda.synchronize() torch.cuda.empty_cache() # 清理Python垃圾 import gc gc.collect() # 重启模型服务在真实生产环境中 print(建议重启模型服务以彻底释放内存)7.2 性能监控与日志记录建立完整的监控体系import logging from datetime import datetime class ModelPerformanceLogger: def __init__(self, log_filemodel_performance.log): self.log_file log_file self.setup_logging() def setup_logging(self): logging.basicConfig( filenameself.log_file, levellogging.INFO, format%(asctime)s - %(levelname)s - %(message)s ) def log_inference(self, prompt_length, response_length, inference_time, memory_used): 记录推理性能数据 logging.info( fInference - Prompt: {prompt_length}, fResponse: {response_length}, fTime: {inference_time:.2f}s, fMemory: {memory_used:.1f}MB ) def log_error(self, error_type, error_message): 记录错误信息 logging.error(f{error_type}: {error_message}) def generate_performance_report(self): 生成性能报告 # 分析日志文件生成统计报告 pass # 集成性能监控到聊天机器人 class MonitoredGLMChatBot(OptimizedGLMChatBot): def __init__(self, model_path): super().__init__(model_path) self.performance_logger ModelPerformanceLogger() self.memory_guard ProductionMemoryGuard() def monitored_chat(self, user_input): # 检查内存安全 is_safe, message self.memory_guard.check_memory_safety() if not is_safe: self.performance_logger.log_error(MemorySafety, message) return 系统内存不足请稍后重试 start_time time.time() start_memory psutil.virtual_memory().used try: response self.chat(user_input) end_time time.time() end_memory psutil.virtual_memory().used # 记录性能数据 self.performance_logger.log_inference( len(user_input), len(response), end_time - start_time, (end_memory - start_memory) / (1024**2) # MB ) return response except Exception as e: self.performance_logger.log_error(InferenceError, str(e)) return 生成过程中出现错误请重试7.3 可扩展架构设计为未来扩展设计灵活的架构from abc import ABC, abstractmethod class ModelAdapter(ABC): 模型适配器抽象类支持多种大模型 abstractmethod def generate(self, prompt, **kwargs): pass abstractmethod def get_memory_usage(self): pass class GLMAdapter(ModelAdapter): def __init__(self, model_path): self.model, self.tokenizer load_quantized_model(model_path) def generate(self, prompt, max_tokens256, temperature0.7): inputs self.tokenizer(prompt, return_tensorspt) with torch.no_grad(): outputs self.model.generate( **inputs, max_new_tokensmax_tokens, temperaturetemperature, do_sampleTrue ) return self.tokenizer.decode(outputs[0], skip_special_tokensTrue) def get_memory_usage(self): return psutil.virtual_memory().used / (1024**3) # GB class ModelManager: 统一管理多个模型实例 def __init__(self): self.adapters {} self.active_model None def register_model(self, name, adapter): self.adapters[name] adapter def switch_model(self, name): if name in self.adapters: self.active_model self.adapters[name] return True return False def generate(self, prompt, **kwargs): if self.active_model: return self.active_model.generate(prompt, **kwargs) else: raise ValueError(没有激活的模型) # 使用示例 def setup_model_manager(): manager ModelManager() # 注册不同版本的GLM模型 glm_adapter GLMAdapter(./glm-4.5-air-local) manager.register_model(glm-4.5-air, glm_adapter) # 可以轻松扩展支持其他模型 # chatglm_adapter ChatGLMAdapter(./chatglm3-6b) # manager.register_model(chatglm3, chatglm_adapter) manager.switch_model(glm-4.5-air) return manager通过本文的完整方案即使在16GB内存的消费级机器上也能成功运行110B参数的GLM-4.5-Air模型。关键在于合理的内存管理、量化技术和优化策略。实际部署时建议根据具体硬件配置调整参数并建立完善的监控体系确保稳定运行。这种技术方案不仅适用于GLM系列模型也可以推广到其他大语言模型的部署场景为资源有限的开发者和研究者提供了实践大模型技术的可行路径。随着模型压缩技术的不断发展未来在消费级硬件上运行更大规模的模型将成为可能。

相关新闻

Linux线程编程:从基础概念到高级实践

Linux线程编程:从基础概念到高级实践

1. 线程基础概念解析线程作为现代操作系统中最核心的进程管理单元,在UNIX/Linux系统中扮演着举足轻重的角色。与传统的进程相比,线程更像是"轻量级进程"——它们共享相同的地址空间和系统资源,但拥有独立的执行流和栈空间。这种特性…

2026/9/27 13:07:23 阅读更多 →
ChatGPT桌面版语音控制AI智能体:语音交互与桌面集成实践

ChatGPT桌面版语音控制AI智能体:语音交互与桌面集成实践

这次我们来看一个结合了语音控制、桌面集成和AI智能体能力的ChatGPT桌面版项目。这个工具的核心价值在于将ChatGPT的对话能力与本地桌面环境深度整合,通过语音指令实现智能任务执行,让AI助手真正成为工作流的一部分。从功能定位来看,这个桌面…

2026/9/30 18:21:40 阅读更多 →
提示词方案评估进入深水区:从人工打分到自动化评估平台搭建(含开源工具链实测)

提示词方案评估进入深水区:从人工打分到自动化评估平台搭建(含开源工具链实测)

更多请点击: https://kaifayun.com 第一章:提示词方案评估进入深水区:从人工打分到自动化评估平台搭建(含开源工具链实测) 当提示词工程从实验性探索迈向规模化落地,人工打分已暴露出一致性差、成本高、难…

2026/10/3 20:38:31 阅读更多 →

最新新闻

nvidia-smi命令找不到?从驱动到容器彻底排查与修复指南

nvidia-smi命令找不到?从驱动到容器彻底排查与修复指南

“nvidia-smi: command not found”大概是 Linux 装显卡驱动时最经典、也最让人摸不着头脑的报错。我第一次遇到是在一台刚装完系统的服务器上,当时还以为是显卡坏了,折腾半天才发现只是驱动没装上。后来搞多了就明白,这个报错本身不复杂&…

2026/10/16 7:57:16 阅读更多 →
大模型上下文管理实战:Token预算、记忆分层与检索召回

大模型上下文管理实战:Token预算、记忆分层与检索召回

前几天我和一朋友调试他做的对话机器人,本来前期测试一切正常,结果聊到第 20 轮的时候,模型突然开始答非所问。他问了一句“我刚才不是说过了吗”,系统毫无反应。我打开日志看了一眼 Token 消耗,心里大概就有数了&…

2026/10/16 7:57:15 阅读更多 →
多模态Agent实战:Harness编排与MCP工具接入的工程架构解析

多模态Agent实战:Harness编排与MCP工具接入的工程架构解析

1. 多模态 Agent:从“能聊”到“能干”的跨越最近这半年,我几乎把所有业余时间都砸在了一个Agent开发项目上。说实话,市面上讨论Agent的声音很多,但真到了自己动手把一个大模型多模态应用和一个可编排的Harness框架、再加上MCP协议…

2026/10/16 7:57:15 阅读更多 →
STM32 FFT频谱分析实战:采样、窗函数与幅值标定指南

STM32 FFT频谱分析实战:采样、窗函数与幅值标定指南

简介:面向STM32F1单片机实现FFT的资源包,适合嵌入式开发者和数字信号处理初学者,系统讲解在Cortex-M3内核上完成快速傅里叶变换所需的算法原理、内存管理、中断定时触发、CMSIS-DSP库应用以及误差与低功耗优化等关键环节。压缩包共225个文件&…

2026/10/16 7:57:15 阅读更多 →
共享内存FIFO:信号量+环形缓冲实现进程间高频通信

共享内存FIFO:信号量+环形缓冲实现进程间高频通信

简介:ShmFifo源代码C版是一份聚焦共享内存与信号量协同工作的进程间通信示例,适合正在学习Linux IPC机制、需要实现多进程高效数据交换的开发者。资源由C语言过程调用版本改造而来,把一块共享内存与互斥、满、空三个信号量封装成C类&#xff…

2026/10/16 7:57:15 阅读更多 →
共享内存与信号量:C++跨进程FIFO队列源码深度解析

共享内存与信号量:C++跨进程FIFO队列源码深度解析

简介:面向系统编程学习者与 Linux 环境开发者,这份 C 版 ShmFifo 源码包演示了共享内存与信号量的结合实践:将一块共享内存和 mutex、full、empty 三个信号量封装为 ShmFifo 类,并提供写入、读取、释放与测试代码,适合…

2026/10/16 7:56:15 阅读更多 →

日新闻

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

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

2026/10/16 0:00:05 阅读更多 →
信号与系统频域分析作业解题指南

信号与系统频域分析作业解题指南

1. 作业背景与核心要求解析信号与系统作为电子信息类专业的核心基础课,其作业设计往往直接关联课程的核心知识框架。2026年春季第六次作业的布置,通常对应着课程进展到频域分析的关键阶段。根据常规教学进度推测,本次作业可能涉及以下核心内容…

2026/10/16 0:00:05 阅读更多 →
Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

1. 从一个"四不像"的练手项目说起如果你已经看完了Django的官方教程前几章,跟着敲完了投票应用,大概会有一种"我好像会了,又好像什么都不会"的割裂感。教程里每个知识点都是拆开的——这一章讲模型,下一章讲视…

2026/10/16 0:00:05 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/15 16:18:54 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/15 19:41:51 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/15 13:48:15 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

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

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

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

2026/10/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

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

2026/10/15 9:49:14 阅读更多 →