Kimi-VL-A3B-Thinking完整指南:日志排查、错误定位、性能监控运维手册

news2026/3/14 8:49:14
Kimi-VL-A3B-Thinking完整指南日志排查、错误定位、性能监控运维手册当你成功部署了Kimi-VL-A3B-Thinking这个强大的图文对话模型后真正的挑战才刚刚开始。模型跑起来了但怎么知道它运行得是否健康遇到问题怎么快速定位性能瓶颈在哪里这些问题正是运维工作的核心。本文将带你深入Kimi-VL-A3B-Thinking的运维世界从日志分析到错误排查从性能监控到优化建议为你提供一份完整的运维实战手册。无论你是刚接触这个模型的新手还是正在维护生产环境的工程师都能在这里找到实用的解决方案。1. 运维基础理解你的部署环境在开始排查问题之前我们需要先搞清楚整个系统的架构。你部署的Kimi-VL-A3B-Thinking采用了vLLM作为推理后端Chainlit作为前端交互界面这是一个典型的生产级部署方案。1.1 系统架构概览整个系统可以看作三层结构前端层Chainlit Web界面负责接收用户输入文字和图片并展示模型回复推理层vLLM服务负责加载模型、处理推理请求、管理计算资源模型层Kimi-VL-A3B-Thinking模型本身包含视觉编码器和语言解码器当你在Chainlit界面上传一张图片并提问时请求的流转路径是这样的Chainlit接收图片和问题图片被预处理后发送给vLLM服务vLLM调用Kimi-VL模型进行推理推理结果返回给ChainlitChainlit将结果显示给用户理解这个流程很重要因为不同环节的问题表现和排查方法完全不同。1.2 关键组件与日志文件系统运行时会生成多个日志文件每个都记录了不同层面的信息/root/workspace/ ├── llm.log # vLLM服务主日志最重要的日志 ├── chainlit.log # Chainlit前端日志 ├── access.log # HTTP访问日志如果有的话 └── error.log # 错误汇总日志llm.log是你最需要关注的日志文件它记录了vLLM服务的启动、模型加载、推理过程等所有关键信息。我们后续的很多排查工作都会围绕这个文件展开。2. 日志分析从启动到运行的完整监控日志是系统运维的眼睛。通过分析日志我们可以了解系统状态、发现问题线索、监控性能指标。下面我带你一步步掌握Kimi-VL-A3B-Thinking的日志分析方法。2.1 启动日志分析模型加载是否成功当你第一次部署或者重启服务时最关心的是模型是否成功加载。这时候需要查看启动阶段的日志。# 查看最近的启动日志 tail -f /root/workspace/llm.log | grep -A 10 -B 5 Loading model # 或者查看完整的启动过程 grep -n INFO\|ERROR\|WARNING /root/workspace/llm.log | head -50正常的启动日志应该包含以下几个关键阶段环境检测检查CUDA、内存等硬件资源模型下载/加载从缓存或网络加载模型文件参数初始化初始化模型权重和配置服务启动启动HTTP/GRPC服务端一个成功的启动日志示例如下2024-01-15 10:30:15 | INFO | Detected CUDA device: NVIDIA A100 80GB 2024-01-15 10:30:16 | INFO | Loading model: Kimi-VL-A3B-Thinking 2024-01-15 10:30:20 | INFO | Model config loaded: {model_type: moe, vision_encoder: MoonViT} 2024-01-15 10:30:45 | INFO | Loading vision encoder weights... (45%) 2024-01-15 10:31:10 | INFO | Loading language model weights... (78%) 2024-01-15 10:31:30 | INFO | Model loaded successfully! Total params: 2.8B (activated) 2024-01-15 10:31:31 | INFO | Starting vLLM server on port: 8000 2024-01-15 10:31:32 | INFO | Server is ready to accept requests如果启动失败常见的错误信息包括CUDA out of memory显存不足需要调整batch size或使用更小的模型Model file not found模型文件缺失检查下载路径Version mismatchPyTorch或CUDA版本不兼容Permission denied文件权限问题2.2 运行日志分析实时监控推理状态模型启动成功后我们需要监控它的运行状态。运行日志主要关注几个方面请求处理、资源使用、错误响应。# 实时监控请求处理 tail -f /root/workspace/llm.log | grep Request\|Response\|inference # 查看资源使用情况 grep memory\|GPU\|CPU /root/workspace/llm.log | tail -20 # 查找错误请求 grep -i error\|fail\|timeout /root/workspace/llm.log | tail -30运行日志中的关键信息请求处理日志示例2024-01-15 10:35:22 | INFO | Received request #42: image_size1024x768, text_len15 2024-01-15 10:35:23 | INFO | Request #42: vision encoding completed (1.2s) 2024-01-15 10:35:25 | INFO | Request #42: text generation completed (2.1s) 2024-01-15 10:35:25 | INFO | Request #42: total latency 3.3s, tokens: 45资源监控日志示例2024-01-15 10:40:00 | INFO | GPU memory: 32.4GB/40GB (81%), GPU util: 65% 2024-01-15 10:40:00 | INFO | System memory: 24.8GB/32GB (77%) 2024-01-15 10:40:00 | INFO | Active requests: 3, Queue length: 22.3 错误日志分析快速定位问题根源当系统出现问题时错误日志是我们排查的第一站。不同的错误类型有不同的排查思路。2.3.1 图片处理错误如果上传的图片无法处理通常会在日志中看到这样的错误2024-01-15 11:20:15 | ERROR | Failed to process image: Unsupported image format 2024-01-15 11:20:16 | ERROR | Image size 5000x4000 exceeds maximum 4096x4096 2024-01-15 11:20:17 | ERROR | Corrupted image file received排查步骤检查图片格式是否支持JPEG、PNG、WEBP等检查图片尺寸是否超过限制默认最大4096x4096验证图片文件是否完整无损2.3.2 推理超时错误当请求处理时间过长时可能会触发超时2024-01-15 11:25:30 | WARNING | Request #58 timeout after 30s 2024-01-15 11:25:31 | ERROR | Inference timeout for request #58可能原因和解决方案图片太大缩小图片尺寸或降低分辨率问题太复杂简化问题或拆分多个简单问题系统负载过高减少并发请求数GPU内存不足调整batch size或清理缓存2.3.3 内存不足错误这是最常见的错误之一特别是在处理大图片或多轮对话时2024-01-15 11:30:45 | ERROR | CUDA out of memory. Tried to allocate 2.5GB 2024-01-15 11:30:46 | ERROR | GPU memory exhausted during vision encoding解决方案立即措施重启服务释放内存短期方案限制图片最大尺寸长期方案增加GPU内存或使用内存优化技术3. 性能监控让系统运行在最佳状态性能监控不仅仅是看系统是否在运行更重要的是看它运行得怎么样。对于Kimi-VL-A3B-Thinking这样的多模态模型我们需要监控多个维度的性能指标。3.1 关键性能指标KPI建立一个简单的监控面板定期检查这些指标#!/bin/bash # 性能监控脚本monitor_kimi_vl.sh echo Kimi-VL Performance Monitor echo Timestamp: $(date) echo # 1. 服务状态检查 echo 1. 服务状态: if curl -s http://localhost:8000/health /dev/null; then echo vLLM服务: ✅ 运行正常 else echo vLLM服务: ❌ 服务异常 fi if curl -s http://localhost:8000 /dev/null; then echo Chainlit服务: ✅ 运行正常 else echo Chainlit服务: ❌ 服务异常 fi # 2. 资源使用情况 echo echo 2. 资源使用: GPU_MEMORY$(nvidia-smi --query-gpumemory.used,memory.total --formatcsv,noheader,nounits | awk -F, {printf %.1fGB/%.1fGB (%.1f%%), $1/1024, $2/1024, $1/$2*100}) echo GPU内存: $GPU_MEMORY GPU_UTIL$(nvidia-smi --query-gpuutilization.gpu --formatcsv,noheader,nounits) echo GPU利用率: ${GPU_UTIL}% # 3. 请求统计从日志中提取 echo echo 3. 请求统计: TOTAL_REQUESTS$(grep -c Received request /root/workspace/llm.log 2/dev/null || echo 0) SUCCESS_REQUESTS$(grep -c completed successfully /root/workspace/llm.log 2/dev/null || echo 0) FAILED_REQUESTS$(grep -c ERROR\|FAILED /root/workspace/llm.log 2/dev/null || echo 0) echo 总请求数: $TOTAL_REQUESTS echo 成功请求: $SUCCESS_REQUESTS if [ $TOTAL_REQUESTS -gt 0 ]; then SUCCESS_RATE$(echo scale2; $SUCCESS_REQUESTS * 100 / $TOTAL_REQUESTS | bc) echo 成功率: ${SUCCESS_RATE}% fi # 4. 响应时间分析 echo echo 4. 响应时间分析: # 从日志中提取最近的响应时间 RECENT_TIMES$(grep total latency /root/workspace/llm.log | tail -10 | awk {print $NF} | sed s/s//) if [ -n $RECENT_TIMES ]; then AVG_TIME$(echo $RECENT_TIMES | awk {sum$1} END {if(NR0) print sum/NR}) MAX_TIME$(echo $RECENT_TIMES | awk NR1{max$1} {if($1max)max$1} END {print max}) MIN_TIME$(echo $RECENT_TIMES | awk NR1{min$1} {if($1min)min$1} END {print min}) echo 平均响应: ${AVG_TIME}s echo 最快响应: ${MIN_TIME}s echo 最慢响应: ${MAX_TIME}s fi echo echo 监控结束 3.2 性能基准测试了解你的系统在理想状态下的性能表现有助于发现性能下降问题。我们可以建立一个简单的基准测试# benchmark_kimi_vl.py import time import requests import base64 from pathlib import Path def benchmark_image_processing(image_path, question, num_tests5): 测试图片处理性能 print(f开始性能测试: {image_path.name}) # 读取并编码图片 with open(image_path, rb) as f: image_data base64.b64encode(f.read()).decode(utf-8) # 准备请求数据 payload { image: image_data, question: question, max_tokens: 100 } latencies [] for i in range(num_tests): start_time time.time() try: response requests.post( http://localhost:8000/generate, jsonpayload, timeout60 ) if response.status_code 200: latency time.time() - start_time latencies.append(latency) print(f 测试 {i1}: {latency:.2f}s - 成功) else: print(f 测试 {i1}: 失败 - HTTP {response.status_code}) except Exception as e: print(f 测试 {i1}: 异常 - {str(e)}) if latencies: avg_latency sum(latencies) / len(latencies) min_latency min(latencies) max_latency max(latencies) print(f\n测试结果:) print(f 平均响应时间: {avg_latency:.2f}s) print(f 最快响应时间: {min_latency:.2f}s) print(f 最慢响应时间: {max_latency:.2f}s) print(f 测试次数: {len(latencies)}/{num_tests}) return latencies # 运行基准测试 if __name__ __main__: # 准备测试图片和问题 test_cases [ (small_image.jpg, 图中有什么物体, 小图片简单问题), (large_image.png, 详细描述图中的场景和人物, 大图片复杂问题), (document.jpg, 提取图片中的文字内容, 文档识别问题) ] print(Kimi-VL-A3B-Thinking 性能基准测试) print( * 50) all_results {} for image_file, question, description in test_cases: image_path Path(image_file) if image_path.exists(): print(f\n测试场景: {description}) results benchmark_image_processing(image_path, question) all_results[description] results else: print(f\n警告: 测试图片 {image_file} 不存在跳过) print(\n * 50) print(基准测试完成)3.3 性能优化建议根据监控数据我们可以采取相应的优化措施3.3.1 针对高延迟的优化如果发现响应时间过长可以尝试图片预处理优化# 在发送给模型前先压缩图片 from PIL import Image def compress_image(image_path, max_size1024): 压缩图片到指定尺寸 img Image.open(image_path) # 保持宽高比缩放 if max(img.size) max_size: ratio max_size / max(img.size) new_size tuple(int(dim * ratio) for dim in img.size) img img.resize(new_size, Image.Resampling.LANCZOS) # 转换为RGB模式如果必要 if img.mode ! RGB: img img.convert(RGB) return img批量处理优化# 如果有多个相似请求可以考虑批量处理 # 但要注意vLLM可能已经做了批量优化3.3.2 针对高内存使用的优化如果内存使用率经常超过80%需要考虑调整vLLM参数# 在启动vLLM时调整这些参数 vllm serve Kimi-VL-A3B-Thinking \ --max-model-len 4096 \ # 减少最大序列长度 --gpu-memory-utilization 0.8 \ # 限制GPU内存使用率 --max-num-batched-tokens 2048 # 限制批量处理的token数启用内存优化技术# 使用量化或内存优化 vllm serve Kimi-VL-A3B-Thinking \ --quantization awq \ # 使用AWQ量化 --dtype half # 使用半精度浮点数4. 常见问题排查手册在实际运维中你会遇到各种各样的问题。这里我整理了一份常见问题排查手册帮助你快速定位和解决问题。4.1 服务无法启动问题现象执行启动命令后服务立即退出或无法访问。排查步骤检查日志文件# 查看详细的错误信息 tail -100 /root/workspace/llm.log # 如果有core dump查看堆栈信息 dmesg | tail -50检查端口占用# 检查8000端口是否被占用 netstat -tlnp | grep :8000 # 如果被占用杀死进程或更换端口 kill -9 PID # 或者修改启动端口 vllm serve Kimi-VL-A3B-Thinking --port 8001检查依赖包# 检查关键依赖版本 python -c import torch; print(fPyTorch: {torch.__version__}) python -c import vllm; print(fvLLM: {vllm.__version__}) # 重新安装有问题的包 pip install --upgrade torch vllm4.2 模型加载失败问题现象服务能启动但模型加载失败。排查步骤检查模型文件# 查看模型文件是否存在 ls -lh ~/.cache/huggingface/hub/models--Kimi-VL--A3B-Thinking/ # 检查文件完整性 find ~/.cache/huggingface -name *.bin -o -name *.safetensors | wc -l检查磁盘空间# 模型需要足够的磁盘空间 df -h /root # 清理缓存 rm -rf ~/.cache/huggingface/hub/tmp-*检查内存和显存# 查看可用内存 free -h # 查看GPU显存 nvidia-smi # 如果显存不足尝试使用CPU模式性能会下降 vllm serve Kimi-VL-A3B-Thinking --device cpu4.3 推理结果异常问题现象服务能正常运行但返回的结果不对或质量差。排查步骤检查输入数据# 验证图片预处理是否正确 from PIL import Image import matplotlib.pyplot as plt def validate_image(image_path): img Image.open(image_path) print(f图片格式: {img.format}) print(f图片尺寸: {img.size}) print(f图片模式: {img.mode}) # 显示图片预览 plt.imshow(img) plt.axis(off) plt.show() return img检查模型配置# 查看模型使用的配置 grep -A 5 -B 5 model_config /root/workspace/llm.log # 检查temperature等生成参数 grep generation_config /root/workspace/llm.log测试标准问题# 使用标准测试问题验证模型 test_questions [ (描述这张图片的内容, 应该返回详细的描述), (图片中有文字吗, 应该识别文字内容), (这是什么类型的图片, 应该返回图片类型) ] for question, expected in test_questions: response call_model(image_path, question) print(f问题: {question}) print(f期望: {expected}) print(f实际: {response[:100]}...) print(- * 50)4.4 性能突然下降问题现象之前运行正常突然变慢或出错率升高。排查步骤检查系统负载# 查看系统整体负载 top # 查看GPU状态 nvidia-smi -l 1 # 每秒刷新一次 # 查看网络连接 ss -tunap | grep :8000检查内存泄漏# 监控内存增长 watch -n 1 free -h | grep Mem # 查看进程内存 ps aux --sort-%mem | head -10 # 如果有内存泄漏考虑定期重启服务 # 可以设置cron job每天凌晨重启 0 3 * * * systemctl restart kimi-vl-service检查日志异常# 查找最近的错误和警告 tail -200 /root/workspace/llm.log | grep -i error\|warn\|exception # 查看请求模式变化 awk /Received request/ {print $1, $2} /root/workspace/llm.log | \ tail -100 | uniq -c5. 运维自动化让系统自我修复手动排查问题效率低下我们可以建立一些自动化机制来监控和维护系统。5.1 健康检查脚本创建一个定期运行的健康检查脚本#!/bin/bash # health_check.sh - Kimi-VL健康检查脚本 LOG_FILE/root/workspace/llm.log HEALTH_URLhttp://localhost:8000/health MAX_RETRIES3 RETRY_DELAY5 # 函数检查服务健康状态 check_health() { for i in $(seq 1 $MAX_RETRIES); do if curl -s -f $HEALTH_URL /dev/null; then echo $(date): 服务健康检查通过 return 0 fi if [ $i -lt $MAX_RETRIES ]; then echo $(date): 健康检查失败第$i次重试... sleep $RETRY_DELAY fi done echo $(date): 错误服务健康检查失败 return 1 } # 函数检查错误率 check_error_rate() { local last_hour$(date -d 1 hour ago %Y-%m-%d %H) local total_requests$(grep -c $last_hour.*Received request $LOG_FILE 2/dev/null || echo 0) local error_requests$(grep -c $last_hour.*ERROR $LOG_FILE 2/dev/null || echo 0) if [ $total_requests -gt 10 ]; then error_rate$((error_requests * 100 / total_requests)) if [ $error_rate -gt 10 ]; then echo $(date): 警告过去一小时错误率 ${error_rate}% return 1 fi fi return 0 } # 函数检查响应时间 check_response_time() { local recent_times$(grep total latency $LOG_FILE 2/dev/null | tail -20 | awk {print $NF} | sed s/s//) if [ -n $recent_times ]; then local avg_time$(echo $recent_times | awk {sum$1} END {if(NR0) print sum/NR}) if (( $(echo $avg_time 10.0 | bc -l) )); then echo $(date): 警告平均响应时间 ${avg_time}s 超过阈值 return 1 fi fi return 0 } # 主检查流程 echo 开始健康检查: $(date) echo # 执行各项检查 check_health health_status$? check_error_rate error_status$? check_response_time response_status$? # 汇总检查结果 if [ $health_status -eq 0 ] [ $error_status -eq 0 ] [ $response_status -eq 0 ]; then echo 所有检查通过 ✅ exit 0 else echo 部分检查失败 ❌ # 可以在这里添加自动修复逻辑 # 比如重启服务、清理缓存等 exit 1 fi5.2 自动告警配置将健康检查与告警系统集成#!/bin/bash # alert_system.sh - 自动告警系统 # 配置告警阈值 ALERT_PHONE13800138000 # 替换为你的手机号需要短信网关 ALERT_EMAILadminexample.com ERROR_RATE_THRESHOLD10 # 错误率阈值% RESPONSE_TIME_THRESHOLD10 # 响应时间阈值秒 MEMORY_USAGE_THRESHOLD90 # 内存使用率阈值% # 发送邮件告警 send_email_alert() { local subject$1 local message$2 echo $message | mail -s $subject $ALERT_EMAIL echo $(date): 邮件告警已发送: $subject } # 发送短信告警需要配置短信网关 send_sms_alert() { local message$1 # 这里需要根据你的短信网关API实现 # curl -X POST https://sms-gateway/api \ # -d phone$ALERT_PHONEmessage$message echo $(date): 短信告警已发送: $message } # 检查并告警 check_and_alert() { # 运行健康检查 ./health_check.sh health_status$? if [ $health_status -ne 0 ]; then local alert_msgKimi-VL服务异常请立即检查 send_email_alert 【紧急】Kimi-VL服务异常 $alert_msg send_sms_alert $alert_msg fi # 检查内存使用 local memory_usage$(nvidia-smi --query-gpumemory.used,memory.total --formatcsv,noheader,nounits | awk -F, {printf %.0f, $1/$2*100}) if [ $memory_usage -gt $MEMORY_USAGE_THRESHOLD ]; then local alert_msgGPU内存使用率 ${memory_usage}% 超过阈值 ${MEMORY_USAGE_THRESHOLD}% send_email_alert 【警告】GPU内存使用过高 $alert_msg fi } # 主循环可以配置为cron job定期执行 while true; do check_and_alert sleep 300 # 每5分钟检查一次 done5.3 日志轮转和清理防止日志文件过大影响系统#!/bin/bash # log_rotate.sh - 日志轮转脚本 LOG_DIR/root/workspace LOG_FILES(llm.log chainlit.log access.log error.log) MAX_SIZE100M # 单个日志文件最大100MB KEEP_DAYS7 # 保留最近7天的日志 # 按大小轮转 rotate_by_size() { for log_file in ${LOG_FILES[]}; do local file_path$LOG_DIR/$log_file if [ -f $file_path ]; then local file_size$(du -m $file_path | cut -f1) if [ $file_size -gt 100 ]; then # 超过100MB echo 轮转日志文件: $log_file (大小: ${file_size}MB) # 创建备份 local timestamp$(date %Y%m%d_%H%M%S) mv $file_path ${file_path}.${timestamp} # 重新创建日志文件 touch $file_path chmod 644 $file_path echo 已创建新的日志文件: $log_file fi fi done } # 清理旧日志 clean_old_logs() { echo 清理超过${KEEP_DAYS}天的旧日志... find $LOG_DIR -name *.log.* -type f -mtime $KEEP_DAYS -delete find $LOG_DIR -name *.gz -type f -mtime $KEEP_DAYS -delete echo 旧日志清理完成 } # 压缩旧日志 compress_old_logs() { echo 压缩旧日志文件... find $LOG_DIR -name *.log.20* -type f ! -name *.gz -exec gzip {} \; echo 日志压缩完成 } # 主流程 echo 开始日志维护: $(date) echo rotate_by_size clean_old_logs compress_old_logs echo 日志维护完成: $(date)6. 总结建立完整的运维体系通过本文的介绍你应该已经掌握了Kimi-VL-A3B-Thinking模型运维的核心技能。让我们回顾一下关键要点6.1 运维要点总结日志是运维的基础学会查看和分析llm.log理解不同日志信息的含义监控要全面不仅要监控服务状态还要监控性能指标、资源使用、错误率等问题要分类处理不同的问题有不同的排查思路建立自己的排查流程自动化是方向通过脚本实现健康检查、自动告警、日志轮转等自动化运维6.2 最佳实践建议基于我的运维经验给你几个实用建议日常维护方面每天至少查看一次关键日志了解系统运行状况每周进行一次性能基准测试监控性能变化趋势每月清理一次旧日志和缓存文件释放磁盘空间问题预防方面设置资源使用阈值告警提前发现问题定期备份重要配置和模型文件建立回滚机制确保问题能快速恢复性能优化方面根据实际使用情况调整vLLM参数考虑使用量化技术减少内存占用对于生产环境建议使用Docker容器化部署6.3 后续学习方向如果你想进一步深入Kimi-VL-A3B-Thinking的运维和优化可以考虑深入vLLM调优学习vLLM的高级配置参数如批处理策略、内存管理、调度算法等监控系统集成将监控数据接入PrometheusGrafana建立可视化监控面板自动化部署使用Ansible、Terraform等工具实现自动化部署和配置管理性能 profiling使用PyTorch Profiler等工具分析模型性能瓶颈运维工作就像照顾一个孩子需要耐心、细心和持续的关注。刚开始可能会遇到各种问题但随着经验的积累你会越来越得心应手。记住好的运维不是等到问题发生才去解决而是通过监控和预防让问题根本没有机会发生。希望这份运维手册能帮助你更好地管理和维护Kimi-VL-A3B-Thinking模型。如果在实践中遇到新的问题或有更好的解决方案欢迎分享和交流。运维之路我们一起前行获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2410558.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…