Super Qwen Voice World生产环境部署:Docker镜像构建与GPU透传配置

news2026/4/8 15:15:42
Super Qwen Voice World生产环境部署Docker镜像构建与GPU透传配置1. 引言想象一下你开发了一个超酷的复古像素风语音设计工具用户只需要输入文字和语气描述就能生成各种情绪饱满的AI配音。这个工具在本地测试时运行完美但当你想要把它部署到服务器上让团队其他成员或者客户也能使用时问题就来了。不同人的电脑环境千差万别——有人用Windows有人用Mac还有人在Linux服务器上。Python版本、依赖库冲突、CUDA驱动不匹配……任何一个环节出问题都可能让这个精心设计的应用无法运行。更麻烦的是语音合成需要GPU加速如何在服务器环境下正确地把GPU“交给”应用使用又是一个技术难题。这就是我们今天要解决的问题如何将“Super Qwen Voice World”这个基于Qwen3-TTS的语音设计应用打包成一个可以在任何支持Docker的环境中一键部署的镜像并且确保GPU加速功能正常工作。读完本文你将掌握如何为AI应用构建生产级的Docker镜像如何正确配置Docker以使用NVIDIA GPU如何优化镜像大小和构建速度如何编写完整的部署文档和启动脚本无论你是个人开发者想要部署自己的AI项目还是团队的技术负责人需要标准化部署流程这篇文章都会给你提供一套完整的解决方案。2. 环境分析与准备工作在开始构建Docker镜像之前我们需要先搞清楚这个应用到底需要什么。盲目开始构建只会浪费时间还可能遇到各种奇怪的兼容性问题。2.1 应用依赖分析Super Qwen Voice World的核心是Qwen3-TTS模型这是一个基于深度学习的语音合成模型。通过查看项目的requirements.txt和代码结构我们可以梳理出以下关键依赖Python环境要求Python 3.8Qwen3-TTS官方要求PyTorch 2.0深度学习框架CUDA 11.8GPU加速支持Transformers库加载预训练模型Streamlit 1.28Web界面框架系统级依赖NVIDIA驱动版本525.60.13CUDA Toolkit版本11.8cuDNN深度学习加速库FFmpeg音频处理可选但推荐应用特定依赖各种Python包numpy、pandas、scipy等字体文件用于复古像素风界面模型权重文件Qwen3-TTS预训练模型2.2 硬件资源评估语音合成对计算资源有一定要求特别是内存和显存# 检查当前系统的GPU信息 nvidia-smi # 输出示例 # --------------------------------------------------------------------------------------- # | NVIDIA-SMI 535.161.07 Driver Version: 535.161.07 CUDA Version: 12.2 | # |------------------------------------------------------------------------------------- # | GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC | # | Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. | # | | | MIG M. | # || # | 0 NVIDIA GeForce RTX 4090 Off | 00000000:01:00.0 On | Off | # | 0% 38C P8 22W / 450W | 157MiB / 24564MiB | 0% Default | # -------------------------------------------------------------------------------------最低配置建议GPUNVIDIA显卡显存≥8GB16GB以上体验更佳内存系统内存≥16GB存储至少20GB可用空间用于存放镜像和模型2.3 开发环境准备在构建Docker镜像之前建议先在本地完成以下准备工作安装Docker和NVIDIA Container Toolkit下载模型权重文件如果应用需要从本地加载准备测试用的语音合成脚本收集所有必要的资源文件字体、图片、配置文件等3. Docker镜像构建实战现在进入正题我们来一步步构建Super Qwen Voice World的Docker镜像。我会带你从最简单的版本开始逐步优化到生产级可用的镜像。3.1 基础镜像选择选择合适的基础镜像是构建高效Docker镜像的第一步。对于AI应用我们通常有以下几个选择基础镜像优点缺点适用场景nvidia/cuda:12.2.0-runtime-ubuntu22.04官方维护CUDA环境完整镜像较大约3GB需要完整CUDA环境pytorch/pytorch:2.1.0-cuda12.1-cudnn8-runtime预装PyTorch开箱即用特定版本可能不兼容PyTorch项目首选python:3.10-slim镜像小巧约100MB需要手动安装CUDA对镜像大小敏感的项目考虑到我们的应用需要完整的CUDA环境和PyTorch我选择第二个选项作为基础# Dockerfile FROM pytorch/pytorch:2.1.0-cuda12.1-cudnn8-runtime # 设置工作目录 WORKDIR /app # 设置环境变量 ENV PYTHONUNBUFFERED1 \ PYTHONDONTWRITEBYTECODE1 \ DEBIAN_FRONTENDnoninteractive3.2 依赖安装与优化安装依赖时要注意顺序和缓存优化这能显著减少构建时间# 安装系统依赖先安装不常变动的部分 RUN apt-get update apt-get install -y \ ffmpeg \ libsndfile1 \ wget \ curl \ git \ rm -rf /var/lib/apt/lists/* # 安装中文字体用于像素风界面 RUN wget -O /usr/share/fonts/ZCOOL_KuaiLe.ttf \ https://fonts.googleapis.com/css2?familyZCOOLKuaiLedisplayswap \ fc-cache -fv # 复制依赖文件利用Docker缓存层 COPY requirements.txt . # 安装Python依赖使用清华镜像加速 RUN pip install --no-cache-dir -i https://pypi.tuna.tsinghua.edu.cn/simple \ -r requirements.txt \ streamlit1.28.0 \ transformers4.36.0依赖安装的最佳实践合并RUN命令减少镜像层数清理缓存安装完成后删除apt/lists使用国内源加速下载过程固定版本避免依赖冲突3.3 应用代码与模型部署现在把我们的应用代码和模型文件复制到镜像中# 复制应用代码 COPY . . # 创建必要的目录 RUN mkdir -p /app/models /app/static /app/logs # 下载模型如果模型较大建议在构建时下载 # 注意这里假设模型可以从HuggingFace下载 # 如果模型很大可以考虑在运行时下载或者使用volume挂载 RUN python -c from transformers import AutoModelForSpeechSeq2Seq, AutoProcessor import torch # 下载Qwen3-TTS模型这里只是示例实际需要根据模型名称调整 model_name Qwen/Qwen3-TTS-VoiceDesign print(f正在下载模型: {model_name}) # 这里可以添加实际的模型下载代码 # 注意生产环境可能需要处理网络问题和重试机制 # 设置文件权限 RUN chmod x /app/entrypoint.sh # 暴露端口Streamlit默认端口8501 EXPOSE 8501 # 设置健康检查 HEALTHCHECK --interval30s --timeout10s --start-period5s --retries3 \ CMD curl -f http://localhost:8501/_stcore/health || exit 1 # 设置启动命令 ENTRYPOINT [./entrypoint.sh]3.4 编写启动脚本创建一个启动脚本entrypoint.sh这样我们可以更灵活地控制应用启动#!/bin/bash # entrypoint.sh set -e echo echo Super Qwen Voice World 启动中... echo # 检查GPU是否可用 if command -v nvidia-smi /dev/null; then echo ✅ 检测到NVIDIA GPU nvidia-smi else echo ⚠️ 未检测到NVIDIA GPU将使用CPU模式 echo 注意CPU模式速度较慢建议使用GPU以获得最佳体验 fi # 检查模型文件 if [ ! -f /app/models/model.safetensors ]; then echo 模型文件不存在开始下载... # 这里添加模型下载逻辑 python download_model.py fi # 设置环境变量 export STREAMLIT_SERVER_PORT8501 export STREAMLIT_SERVER_ADDRESS0.0.405.0 export STREAMLIT_SERVER_HEADLESStrue # 启动Streamlit应用 echo 启动Streamlit服务... echo 访问地址: http://localhost:8501 exec streamlit run app/main.py \ --server.port8501 \ --server.address0.0.0.0 \ --server.headlesstrue \ --browser.serverAddresslocalhost \ --browser.gatherUsageStatsfalse3.5 构建与测试镜像现在我们可以构建并测试镜像了# 构建镜像注意最后的点号 docker build -t super-qwen-voice:latest . # 查看构建的镜像 docker images | grep super-qwen-voice # 测试运行不带GPU docker run -it --rm -p 8501:8501 super-qwen-voice:latest # 如果一切正常你应该能看到Streamlit的启动日志4. GPU透传配置详解对于AI应用来说GPU加速是性能的关键。Docker默认情况下是无法直接访问宿主机的GPU的我们需要进行特殊配置。4.1 NVIDIA Container Toolkit安装首先需要在宿主机上安装NVIDIA Container Toolkit# Ubuntu/Debian系统 distribution$(. /etc/os-release;echo $ID$VERSION_ID) curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add - curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list sudo apt-get update sudo apt-get install -y nvidia-container-toolkit sudo systemctl restart docker # 验证安装 docker run --rm --gpus all nvidia/cuda:12.2.0-base-ubuntu22.04 nvidia-smi4.2 Docker运行时的GPU配置安装完成后我们可以用几种不同的方式在Docker中使用GPU方式1使用--gpus all参数推荐# 使用所有GPU docker run -it --rm \ --gpus all \ -p 8501:8501 \ super-qwen-voice:latest # 使用特定GPU比如只使用GPU 0 docker run -it --rm \ --gpus device0 \ -p 8501:8501 \ super-qwen-voice:latest # 限制GPU内存使用 docker run -it --rm \ --gpus all \ --gpus device0,1 \ -e NVIDIA_VISIBLE_DEVICES0,1 \ -e NVIDIA_DRIVER_CAPABILITIEScompute,utility \ -p 8501:8501 \ super-qwen-voice:latest方式2使用nvidia-docker2旧版方式# 需要先安装nvidia-docker2 docker run -it --rm \ --runtimenvidia \ -e NVIDIA_VISIBLE_DEVICESall \ -p 8501:8501 \ super-qwen-voice:latest4.3 Docker Compose配置对于生产环境我们通常使用Docker Compose来管理多个服务。下面是一个完整的docker-compose.yml配置示例version: 3.8 services: super-qwen-voice: build: . container_name: super-qwen-voice restart: unless-stopped ports: - 8501:8501 environment: - NVIDIA_VISIBLE_DEVICESall - NVIDIA_DRIVER_CAPABILITIEScompute,utility - TZAsia/Shanghai - PYTHONPATH/app volumes: # 挂载模型目录避免每次重新下载 - ./models:/app/models # 挂载日志目录 - ./logs:/app/logs # 挂载配置文件如果有 - ./config:/app/config deploy: resources: reservations: devices: - driver: nvidia count: all capabilities: [gpu] healthcheck: test: [CMD, curl, -f, http://localhost:8501/_stcore/health] interval: 30s timeout: 10s retries: 3 start_period: 40s networks: - app-network # 可以添加其他服务比如Nginx反向代理 nginx: image: nginx:alpine ports: - 80:80 - 443:443 volumes: - ./nginx.conf:/etc/nginx/nginx.conf:ro depends_on: - super-qwen-voice networks: - app-network networks: app-network: driver: bridge4.4 验证GPU是否正常工作在容器内部我们可以通过几种方式验证GPU是否被正确识别和使用# test_gpu.py - 在容器内运行的测试脚本 import torch import sys def check_gpu(): print( * 50) print(GPU可用性检查) print( * 50) # 检查CUDA是否可用 cuda_available torch.cuda.is_available() print(fCUDA可用: {cuda_available}) if cuda_available: # 显示GPU数量 gpu_count torch.cuda.device_count() print(fGPU数量: {gpu_count}) # 显示每个GPU的信息 for i in range(gpu_count): gpu_name torch.cuda.get_device_name(i) gpu_memory torch.cuda.get_device_properties(i).total_memory / 1024**3 print(fGPU {i}: {gpu_name} ({gpu_memory:.2f} GB)) # 测试GPU计算 with torch.cuda.device(i): x torch.randn(1000, 1000).cuda() y torch.randn(1000, 1000).cuda() z torch.matmul(x, y) print(f GPU {i} 计算测试: 通过) else: print(警告: CUDA不可用将使用CPU模式) print(语音合成速度会显著变慢) print( * 50) return cuda_available if __name__ __main__: available check_gpu() sys.exit(0 if available else 1)在容器内运行测试# 进入容器 docker exec -it super-qwen-voice bash # 运行测试脚本 python test_gpu.py # 预期输出 # # GPU可用性检查 # # CUDA可用: True # GPU数量: 1 # GPU 0: NVIDIA GeForce RTX 4090 (24.00 GB) # GPU 0 计算测试: 通过 # 5. 生产环境部署优化基础功能完成后我们需要考虑生产环境的特殊需求。这里有几个关键的优化点。5.1 镜像大小优化原始的镜像可能很大几个GB我们可以通过多阶段构建来减小镜像大小# 第一阶段构建阶段 FROM pytorch/pytorch:2.1.0-cuda12.1-cudnn8-runtime as builder WORKDIR /build # 复制依赖文件 COPY requirements.txt . # 安装构建依赖 RUN pip install --no-cache-dir -r requirements.txt # 复制应用代码 COPY . . # 第二阶段运行阶段 FROM pytorch/pytorch:2.1.0-cuda12.1-cudnn8-runtime WORKDIR /app # 从构建阶段复制必要的文件 COPY --frombuilder /usr/local/lib/python3.10/site-packages /usr/local/lib/python3.10/site-packages COPY --frombuilder /build /app # 只复制运行需要的文件不复制测试文件、文档等 RUN rm -rf /app/tests /app/docs /app/.git # 创建非root用户安全最佳实践 RUN useradd -m -u 1000 -s /bin/bash appuser \ chown -R appuser:appuser /app USER appuser # 暴露端口和启动命令 EXPOSE 8501 ENTRYPOINT [./entrypoint.sh]5.2 性能优化配置在entrypoint.sh中添加性能优化配置#!/bin/bash # entrypoint.sh - 优化版 set -e # 设置PyTorch性能优化环境变量 export PYTORCH_CUDA_ALLOC_CONFmax_split_size_mb:128 export CUDA_LAUNCH_BLOCKING0 export TF_CPP_MIN_LOG_LEVEL2 # 减少TensorFlow日志 # 根据GPU数量设置并行线程 NUM_GPUS$(nvidia-smi -L | wc -l) if [ $NUM_GPUS -gt 1 ]; then export OMP_NUM_THREADS$((NUM_GPUS * 2)) echo 检测到 ${NUM_GPUS} 个GPU设置OMP_NUM_THREADS${OMP_NUM_THREADS} else export OMP_NUM_THREADS4 fi # 设置Python内存管理 export PYTHONMALLOCmalloc export PYTHONFAULTHANDLER1 # 原有的启动逻辑...5.3 监控与日志生产环境需要完善的监控和日志系统# logging_config.py - 日志配置 import logging import sys from pathlib import Path def setup_logging(): 配置应用日志 log_dir Path(/app/logs) log_dir.mkdir(exist_okTrue) # 创建格式化器 formatter logging.Formatter( %(asctime)s - %(name)s - %(levelname)s - %(message)s ) # 文件处理器按天轮转 from logging.handlers import TimedRotatingFileHandler file_handler TimedRotatingFileHandler( log_dir / app.log, whenmidnight, interval1, backupCount30 ) file_handler.setFormatter(formatter) file_handler.setLevel(logging.INFO) # 控制台处理器 console_handler logging.StreamHandler(sys.stdout) console_handler.setFormatter(formatter) console_handler.setLevel(logging.INFO) # 配置根日志记录器 root_logger logging.getLogger() root_logger.setLevel(logging.INFO) root_logger.addHandler(file_handler) root_logger.addHandler(console_handler) # 特别配置某些库的日志级别 logging.getLogger(transformers).setLevel(logging.WARNING) logging.getLogger(torch).setLevel(logging.WARNING) return root_logger # 在应用启动时调用 logger setup_logging() logger.info(Super Qwen Voice World 启动完成)5.4 健康检查与就绪检查在Docker Compose或Kubernetes配置中添加健康检查# docker-compose.prod.yml services: super-qwen-voice: # ... 其他配置 ... healthcheck: test: | curl -f http://localhost:8501/_stcore/health || python -c import torch if not torch.cuda.is_available(): print(GPU不可用) exit(1) interval: 30s timeout: 10s retries: 3 start_period: 60s6. 完整部署流程示例让我们通过一个完整的示例看看如何从零开始部署Super Qwen Voice World。6.1 项目结构首先确保你的项目结构如下super-qwen-voice/ ├── Dockerfile ├── docker-compose.yml ├── entrypoint.sh ├── requirements.txt ├── .dockerignore ├── app/ │ ├── main.py # Streamlit主应用 │ ├── tts_engine.py # TTS引擎 │ └── ui/ # 界面组件 ├── models/ # 模型文件通过volume挂载 ├── config/ # 配置文件 ├── logs/ # 日志目录 └── scripts/ ├── download_model.py └── test_gpu.py6.2 .dockerignore文件创建.dockerignore文件避免不必要的文件被打包进镜像# .dockerignore .git .gitignore README.md *.pyc __pycache__/ *.log .env .vscode/ .idea/ *.swp *.swo *~ test/ tests/ docs/ build/ dist/ *.egg-info/ .DS_Store6.3 一键部署脚本创建部署脚本deploy.sh#!/bin/bash # deploy.sh - 一键部署脚本 set -e echo Super Qwen Voice World 部署开始 echo # 检查Docker是否安装 if ! command -v docker /dev/null; then echo ❌ Docker未安装请先安装Docker exit 1 fi # 检查NVIDIA Container Toolkit if ! docker run --rm --gpus all nvidia/cuda:12.2.0-base-ubuntu22.04 nvidia-smi /dev/null; then echo ⚠️ NVIDIA Container Toolkit未正确安装或GPU不可用 read -p 是否继续使用CPU模式(y/n): -n 1 -r echo if [[ ! $REPLY ~ ^[Yy]$ ]]; then echo 部署中止 exit 1 fi GPU_MODEcpu else GPU_MODEgpu echo ✅ NVIDIA GPU可用 fi # 创建必要的目录 echo 创建目录结构... mkdir -p models logs config # 构建Docker镜像 echo 构建Docker镜像... docker build -t super-qwen-voice:latest . # 启动服务 echo 启动服务... if [ $GPU_MODE gpu ]; then docker-compose -f docker-compose.yml up -d else echo ⚠️ 使用CPU模式启动性能较差 docker-compose -f docker-compose.cpu.yml up -d fi # 等待服务启动 echo ⏳ 等待服务启动... sleep 10 # 检查服务状态 if curl -f http://localhost:8501/_stcore/health /dev/null; then echo ✅ 服务启动成功 echo 访问地址: http://localhost:8501 echo 查看日志: docker-compose logs -f else echo ❌ 服务启动失败请检查日志 docker-compose logs exit 1 fi echo echo 部署完成 echo 常用命令: echo 停止服务: docker-compose down echo 查看日志: docker-compose logs -f echo 重启服务: docker-compose restart echo 6.4 CPU模式配置创建CPU模式的Docker Compose配置docker-compose.cpu.ymlversion: 3.8 services: super-qwen-voice: build: . container_name: super-qwen-voice-cpu restart: unless-stopped ports: - 8501:8501 environment: - CUDA_VISIBLE_DEVICES # 空字符串表示禁用GPU - FORCE_CPUtrue volumes: - ./models:/app/models - ./logs:/app/logs - ./config:/app/config healthcheck: test: [CMD, curl, -f, http://localhost:8501/_stcore/health] interval: 30s timeout: 10s retries: 36.5 实际部署操作现在让我们实际部署一次# 1. 克隆项目如果是第一次 git clone https://github.com/your-username/super-qwen-voice.git cd super-qwen-voice # 2. 给脚本添加执行权限 chmod x deploy.sh entrypoint.sh # 3. 运行部署脚本 ./deploy.sh # 4. 查看部署状态 docker-compose ps # 5. 查看实时日志 docker-compose logs -f # 6. 测试服务 curl http://localhost:8501 # 7. 停止服务 docker-compose down # 8. 更新服务修改代码后 docker-compose build --no-cache docker-compose up -d7. 总结通过本文的步骤我们完成了Super Qwen Voice World从开发环境到生产环境的完整部署流程。让我们回顾一下关键要点7.1 核心收获Docker镜像构建我们学会了如何为AI应用构建优化的Docker镜像包括依赖管理、层缓存优化、多阶段构建等技巧。GPU透传配置掌握了在Docker中使用NVIDIA GPU的完整方法包括NVIDIA Container Toolkit的安装、运行参数配置、以及验证GPU是否正常工作。生产环境优化了解了生产环境部署需要考虑的性能优化、监控日志、健康检查等关键要素。完整部署流程从项目结构规划到一键部署脚本我们建立了一套完整的、可重复的部署流程。7.2 最佳实践建议基于实际项目经验我总结了几条建议镜像构建方面使用多阶段构建减小镜像大小合理利用Docker缓存加速构建创建非root用户运行容器安全考虑使用.dockerignore排除不必要的文件GPU配置方面始终验证GPU在容器内是否可用根据实际需求限制GPU使用避免资源浪费考虑CPU回退方案提高兼容性生产部署方面配置完善的日志系统添加健康检查和就绪检查使用Docker Compose或Kubernetes管理服务准备监控和告警机制7.3 后续优化方向如果你想让这个部署更加完善可以考虑CI/CD流水线使用GitHub Actions或GitLab CI自动构建和部署Kubernetes部署如果需要大规模部署迁移到K8s集群模型版本管理实现模型的版本控制和热更新性能监控集成Prometheus和Grafana监控系统资源自动扩缩容根据负载自动调整实例数量7.4 常见问题排查如果在部署过程中遇到问题可以按以下步骤排查GPU不可用检查NVIDIA驱动、Docker版本、NVIDIA Container Toolkit安装容器启动失败查看Docker日志docker-compose logs模型加载慢考虑预下载模型或使用模型缓存内存不足调整批处理大小或使用CPU卸载端口冲突修改docker-compose.yml中的端口映射部署AI应用确实比普通Web应用复杂一些但一旦掌握了正确的方法你会发现它其实并不难。关键是要理解每个步骤的原理而不是盲目复制命令。现在你的Super Qwen Voice World已经可以在任何支持Docker的环境中运行了。无论是本地开发、团队测试还是生产部署这套方案都能很好地工作。快去试试吧让你的复古像素风语音设计中心在更多地方响起8-bit的声音冒险获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2492672.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;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…