新手友好:TranslateGemma本地部署与简单调用教程

news2026/3/14 0:07:00
新手友好TranslateGemma本地部署与简单调用教程1. 为什么选择本地部署TranslateGemma想象一下你正在处理一份重要的技术文档或者一段需要精准翻译的法律合同。传统的在线翻译工具虽然方便但总让人隐隐担忧我的数据安全吗翻译质量能满足专业要求吗网络延迟会不会打断我的工作流这就是本地部署翻译模型的价值所在。它把翻译能力从遥远的云端服务器直接搬到了你自己的电脑上。数据不出本地隐私得到最大程度的保护翻译质量由你选择的模型决定不受网络服务商限制更重要的是它完全离线工作无论网络状况如何翻译服务始终在线。今天我们要介绍的TranslateGemma就是这样一个为本地部署而生的强大工具。它基于Google最新的Gemma架构专门为翻译任务优化。最吸引人的是这个项目通过巧妙的技术手段让一个拥有120亿参数的“大块头”模型能够平稳地运行在两张消费级显卡上。这意味着你不需要购买昂贵的专业计算卡用两张RTX 4090就能获得企业级的翻译体验。对于开发者、内容创作者、研究人员或者任何需要高质量、高隐私翻译服务的用户来说学会本地部署TranslateGemma就像是拥有了一台永不掉线的专业翻译机。接下来我会带你一步步完成部署并展示如何用最简单的方式调用它。2. 环境准备与快速部署在开始之前我们先确认一下你需要准备什么。整个过程比想象中简单即使你是第一次接触这类工具也能顺利完成。2.1 硬件与系统要求首先看看你的电脑是否满足基本要求显卡至少需要两张NVIDIA RTX 4090显卡或者性能相近的其他型号。这是模型并行运行的基础。显存每张卡需要约13GB可用显存两张卡总共约26GB。如果你的显卡显存更大那当然更好。内存建议系统内存RAM不低于32GB确保运行流畅。存储空间需要约30GB的可用磁盘空间用于存放模型文件和运行环境。操作系统推荐使用Ubuntu 20.04或更高版本或者Windows 11。本教程以Ubuntu为例。如果你不确定自己的配置可以在终端运行nvidia-smi命令查看显卡信息用free -h查看内存情况。2.2 一键部署步骤现在开始实际的部署过程。TranslateGemma项目已经为我们准备好了完整的部署方案你只需要按顺序执行几个命令。第一步获取项目代码。打开终端找一个你喜欢的目录执行# 克隆项目仓库 git clone https://github.com/your-repo/TranslateGemma-Matrix-Engine.git cd TranslateGemma-Matrix-Engine第二步设置Python环境。我建议使用conda来管理环境避免与其他项目冲突# 创建新的Python环境 conda create -n translategemma python3.10 conda activate translategemma # 安装必要的依赖包 pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 pip install transformers accelerate sentencepiece protobuf第三步下载模型文件。这是最关键的一步模型文件比较大请确保网络稳定# 创建模型保存目录 mkdir -p models # 下载TranslateGemma-12B-IT模型 # 注意实际下载链接请参考项目官方文档 # 这里假设模型文件已经准备好如果你从Hugging Face下载可以使用以下方式from huggingface_hub import snapshot_download snapshot_download( repo_idgoogle/translategemma-12B-IT, local_dir./models/translategemma-12B-IT, local_dir_use_symlinksFalse )第四步配置双卡运行环境。创建配置文件config.yaml# config.yaml model_path: ./models/translategemma-12B-IT device_map: auto max_memory: 0: 13GB 1: 13GB torch_dtype: bfloat16 trust_remote_code: true第五步编写启动脚本start_server.pyimport os import torch from transformers import AutoModelForSeq2SeqLM, AutoTokenizer from accelerate import init_empty_weights, load_checkpoint_and_dispatch import yaml # 读取配置 with open(config.yaml, r) as f: config yaml.safe_load(f) # 设置可见的GPU设备 os.environ[CUDA_VISIBLE_DEVICES] 0,1 print(正在加载模型和分词器...) # 加载分词器 tokenizer AutoTokenizer.from_pretrained( config[model_path], trust_remote_codeconfig[trust_remote_code] ) # 使用accelerate进行模型并行加载 with init_empty_weights(): model AutoModelForSeq2SeqLM.from_pretrained( config[model_path], torch_dtypegetattr(torch, config[torch_dtype]), trust_remote_codeconfig[trust_remote_code] ) # 将模型分配到两张显卡上 model load_checkpoint_and_dispatch( model, config[model_path], device_mapconfig[device_map], max_memoryconfig[max_memory], no_split_module_classes[GemmaDecoderLayer] ) print(模型加载完成) print(f模型已分配到设备: {model.hf_device_map}) # 保存加载好的模型和分词器以备后用 model.save_pretrained(./loaded_model) tokenizer.save_pretrained(./loaded_model) print(模型已保存到 ./loaded_model 目录)运行这个脚本模型就会自动分配到两张显卡上python start_server.py如果一切顺利你会看到类似这样的输出正在加载模型和分词器... 模型加载完成 模型已分配到设备: {model.embed_tokens: 0, model.layers.0: 0, ... lm_head: 1} 模型已保存到 ./loaded_model 目录恭喜到这里TranslateGemma已经成功部署到你的本地环境了。整个过程可能花费一些时间主要是在下载模型文件但一旦完成后续使用就会非常顺畅。3. 第一次翻译体验模型部署好了现在让我们来试试它的翻译能力。我会带你完成几个简单的翻译示例让你快速感受这个模型的强大之处。3.1 基础翻译功能创建一个简单的Python脚本translate_demo.pyimport torch from transformers import AutoModelForSeq2SeqLM, AutoTokenizer # 加载之前保存的模型和分词器 model_path ./loaded_model tokenizer AutoTokenizer.from_pretrained(model_path) model AutoModelForSeq2SeqLM.from_pretrained(model_path) # 确保模型在评估模式 model.eval() def translate_text(text, source_langen, target_langzh): 简单的翻译函数 # 构建翻译指令 prompt fTranslate the following {source_lang} text to {target_lang}: {text} # 编码输入 inputs tokenizer(prompt, return_tensorspt, truncationTrue, max_length512) # 将输入移动到正确的设备模型会自动处理 inputs {k: v.to(model.device) for k, v in inputs.items()} # 生成翻译 with torch.no_grad(): outputs model.generate( **inputs, max_new_tokens256, temperature0.7, do_sampleTrue, top_p0.9 ) # 解码输出 translated_text tokenizer.decode(outputs[0], skip_special_tokensTrue) # 提取纯翻译结果去掉指令部分 if : in translated_text: translated_text translated_text.split(:, 1)[1].strip() return translated_text # 测试几个例子 test_cases [ (Hello, how are you today?, en, zh), (The quick brown fox jumps over the lazy dog., en, zh), (This is a technical document about machine learning., en, zh), (Je pense, donc je suis., fr, zh), # 法语到中文 (El futuro pertenece a quienes creen en la belleza de sus sueños., es, zh) # 西班牙语到中文 ] print(开始翻译测试...) print( * 50) for text, src, tgt in test_cases: result translate_text(text, src, tgt) print(f原文 ({src}): {text}) print(f译文 ({tgt}): {result}) print(- * 50)运行这个脚本python translate_demo.py你应该能看到类似这样的输出开始翻译测试... 原文 (en): Hello, how are you today? 译文 (zh): 你好今天过得怎么样 -------------------------------------------------- 原文 (en): The quick brown fox jumps over the lazy dog. 译文 (zh): 敏捷的棕色狐狸跳过了懒惰的狗。 --------------------------------------------------3.2 尝试更多功能TranslateGemma不仅能做简单的句子翻译还支持一些高级功能。让我们试试代码翻译def translate_code(code_snippet, source_langpython, target_langchinese_explanation): 将代码翻译成中文解释 prompt fTranslate the following {source_lang} code into {target_lang} explanation: {code_snippet} Provide a clear explanation in Chinese: inputs tokenizer(prompt, return_tensorspt, truncationTrue, max_length1024) inputs {k: v.to(model.device) for k, v in inputs.items()} with torch.no_grad(): outputs model.generate( **inputs, max_new_tokens512, temperature0.3, # 降低温度使输出更确定 do_sampleFalse # 使用贪婪解码保证准确性 ) explanation tokenizer.decode(outputs[0], skip_special_tokensTrue) return explanation # 测试代码翻译 python_code def fibonacci(n): if n 1: return n else: return fibonacci(n-1) fibonacci(n-2) print(代码翻译测试...) print( * 50) print(Python代码:) print(python_code) print(\n中文解释:) explanation translate_code(python_code) print(explanation)这个功能对于学习编程或者阅读英文代码库特别有用。模型会把代码的逻辑用中文解释清楚帮助你理解代码的用途和工作原理。3.3 批量翻译处理如果你需要翻译大量文本可以试试批量处理def batch_translate(texts, source_langen, target_langzh, batch_size4): 批量翻译文本 results [] for i in range(0, len(texts), batch_size): batch texts[i:ibatch_size] batch_results [] for text in batch: prompt fTranslate from {source_lang} to {target_lang}: {text} inputs tokenizer(prompt, return_tensorspt, truncationTrue, max_length512) inputs {k: v.to(model.device) for k, v in inputs.items()} with torch.no_grad(): outputs model.generate( **inputs, max_new_tokens256, temperature0.7, do_sampleTrue ) translated tokenizer.decode(outputs[0], skip_special_tokensTrue) if : in translated: translated translated.split(:, 1)[1].strip() batch_results.append(translated) results.extend(batch_results) print(f已处理 {min(ibatch_size, len(texts))}/{len(texts)} 条) return results # 批量翻译示例 documents [ Machine learning is a subset of artificial intelligence., Deep learning uses neural networks with multiple layers., Natural language processing helps computers understand human language., Computer vision enables machines to interpret visual information. ] print(批量翻译测试...) translations batch_translate(documents) for original, translated in zip(documents, translations): print(f原文: {original}) print(f译文: {translated}) print()通过这几个例子你应该已经感受到了TranslateGemma的基本能力。它不仅能处理日常对话翻译还能应对技术文档、代码解释等专业场景。4. 构建简单的Web界面虽然命令行工具很强大但有个可视化界面会更方便日常使用。让我们用Python的Gradio库快速搭建一个翻译网页应用。4.1 安装Gradio首先安装必要的库pip install gradio4.2 创建Web应用创建一个新文件web_interface.pyimport gradio as gr import torch from transformers import AutoModelForSeq2SeqLM, AutoTokenizer import threading import time # 全局变量 model None tokenizer None model_loaded False def load_model(): 在后台加载模型 global model, tokenizer, model_loaded print(开始加载模型...) start_time time.time() try: model_path ./loaded_model tokenizer AutoTokenizer.from_pretrained(model_path) model AutoModelForSeq2SeqLM.from_pretrained(model_path) model.eval() model_loaded True load_time time.time() - start_time print(f模型加载完成耗时: {load_time:.2f}秒) except Exception as e: print(f模型加载失败: {e}) return False return True def translate_text_interface(text, source_lang, target_lang): Gradio界面调用的翻译函数 if not model_loaded: return 错误: 模型尚未加载完成请稍后再试。 if not text.strip(): return 请输入要翻译的文本。 try: # 构建翻译指令 if source_lang auto: prompt fTranslate to {target_lang}: {text} else: prompt fTranslate from {source_lang} to {target_lang}: {text} # 编码输入 inputs tokenizer(prompt, return_tensorspt, truncationTrue, max_length512) inputs {k: v.to(model.device) for k, v in inputs.items()} # 生成翻译 with torch.no_grad(): outputs model.generate( **inputs, max_new_tokens512, temperature0.7, do_sampleTrue, top_p0.9, repetition_penalty1.1 ) # 解码输出 translated tokenizer.decode(outputs[0], skip_special_tokensTrue) # 清理输出 if : in translated: translated translated.split(:, 1)[1].strip() return translated except Exception as e: return f翻译出错: {str(e)} def translate_code_interface(code_text): 代码翻译专用函数 if not model_loaded: return 错误: 模型尚未加载完成请稍后再试。 if not code_text.strip(): return 请输入要翻译的代码。 try: prompt fTranslate the following Python code into Chinese explanation: {code_text} Provide a clear explanation in Chinese: inputs tokenizer(prompt, return_tensorspt, truncationTrue, max_length1024) inputs {k: v.to(model.device) for k, v in inputs.items()} with torch.no_grad(): outputs model.generate( **inputs, max_new_tokens768, temperature0.3, do_sampleFalse ) explanation tokenizer.decode(outputs[0], skip_special_tokensTrue) return explanation except Exception as e: return f代码翻译出错: {str(e)} # 在后台加载模型 load_thread threading.Thread(targetload_model) load_thread.start() # 创建Gradio界面 with gr.Blocks(titleTranslateGemma 本地翻译系统, themegr.themes.Soft()) as demo: gr.Markdown(# TranslateGemma 本地翻译系统) gr.Markdown(基于Google TranslateGemma-12B-IT的本地化翻译解决方案) with gr.Row(): with gr.Column(scale1): gr.Markdown(### 系统状态) status_text gr.Markdown( 正在加载模型...) def update_status(): if model_loaded: return ✅ 模型已就绪可以开始翻译 else: return 模型加载中请稍候... # 定时更新状态 demo.load(update_status, outputsstatus_text, every1) with gr.Column(scale3): with gr.Tab(文本翻译): with gr.Row(): source_lang gr.Dropdown( choices[auto, en, zh, fr, de, es, ja, ko], valueauto, label源语言 ) target_lang gr.Dropdown( choices[zh, en, fr, de, es, ja, ko], valuezh, label目标语言 ) with gr.Row(): input_text gr.Textbox( label输入文本, placeholder请输入要翻译的文本..., lines5 ) output_text gr.Textbox( label翻译结果, placeholder翻译结果将显示在这里..., lines5 ) translate_btn gr.Button(翻译, variantprimary) translate_btn.click( translate_text_interface, inputs[input_text, source_lang, target_lang], outputsoutput_text ) # 示例文本 examples gr.Examples( examples[ [Hello, how are you today? This is a test of the translation system., auto, zh], [人工智能正在改变我们的世界。, auto, en], [La vie est belle, profitez de chaque moment., auto, zh], [技術の進歩は私たちの生活をより便利にします。, auto, zh] ], inputs[input_text, source_lang, target_lang], outputsoutput_text, fntranslate_text_interface, label示例 ) with gr.Tab(代码翻译): code_input gr.Code( label输入代码, languagepython, valuedef hello_world():\n print(Hello, World!) ) code_output gr.Textbox( label中文解释, lines10 ) code_btn gr.Button(翻译代码, variantprimary) code_btn.click( translate_code_interface, inputscode_input, outputscode_output ) with gr.Tab(批量翻译): batch_input gr.Textbox( label批量输入每行一条, placeholder请输入要翻译的文本每行一条..., lines8 ) batch_output gr.Textbox( label批量结果, lines8 ) def batch_translate_interface(texts, src_lang, tgt_lang): if not model_loaded: return 错误: 模型尚未加载完成 lines texts.strip().split(\n) results [] for line in lines: if line.strip(): result translate_text_interface(line.strip(), src_lang, tgt_lang) results.append(f{line.strip()}\n→ {result}\n) return \n.join(results) batch_src_lang gr.Dropdown( choices[auto, en, zh], valueauto, label源语言 ) batch_tgt_lang gr.Dropdown( choices[zh, en], valuezh, label目标语言 ) batch_btn gr.Button(批量翻译, variantprimary) batch_btn.click( batch_translate_interface, inputs[batch_input, batch_src_lang, batch_tgt_lang], outputsbatch_output ) gr.Markdown(---) gr.Markdown(### 使用说明) gr.Markdown( 1. **文本翻译**: 选择源语言和目标语言输入文本后点击翻译 2. **代码翻译**: 在代码翻译标签页输入代码获取中文解释 3. **批量翻译**: 在批量翻译标签页每行输入一条文本一次性翻译 4. **自动检测**: 选择auto作为源语言模型会自动识别语言 ) # 启动应用 if __name__ __main__: demo.launch( server_name0.0.0.0, server_port7860, shareFalse )运行这个应用python web_interface.py然后在浏览器中打开http://localhost:7860你就能看到一个功能完整的翻译界面了。这个界面提供了文本翻译、代码翻译和批量翻译三种模式基本能满足日常使用需求。5. 常见问题与优化建议在部署和使用过程中你可能会遇到一些问题。这里我整理了一些常见问题的解决方法以及一些优化建议。5.1 常见问题解决问题1CUDA内存不足错误如果你看到类似CUDA out of memory的错误可以尝试以下解决方案# 修改config.yaml中的内存分配 max_memory: 0: 12GB # 稍微减少一些 1: 12GB # 或者在代码中调整 model load_checkpoint_and_dispatch( model, config[model_path], device_mapbalanced, # 使用自动平衡策略 max_memory{0: 12GB, 1: 12GB}, no_split_module_classes[GemmaDecoderLayer] )问题2模型加载缓慢首次加载模型可能会比较慢可以尝试以下优化# 使用更快的加载方式 from accelerate import infer_auto_device_map # 预计算设备映射 device_map infer_auto_device_map( model, max_memory{0: 13GB, 1: 13GB}, no_split_module_classes[GemmaDecoderLayer] ) # 然后使用这个设备映射加载 model load_checkpoint_and_dispatch( model, config[model_path], device_mapdevice_map # 使用预计算的映射 )问题3翻译质量不理想如果翻译结果不够准确可以调整生成参数# 调整生成参数 outputs model.generate( **inputs, max_new_tokens512, # 增加生成长度 temperature0.5, # 降低温度使输出更确定 do_sampleTrue, top_p0.95, # 提高top-p值 top_k50, # 使用top-k采样 repetition_penalty1.2, # 增加重复惩罚 num_beams4, # 使用束搜索 early_stoppingTrue )5.2 性能优化建议建议1使用量化模型如果显存紧张可以考虑使用量化版本的模型# 加载4位量化的模型需要bitsandbytes库 from transformers import BitsAndBytesConfig quantization_config BitsAndBytesConfig( load_in_4bitTrue, bnb_4bit_compute_dtypetorch.bfloat16, bnb_4bit_use_double_quantTrue, bnb_4bit_quant_typenf4 ) model AutoModelForSeq2SeqLM.from_pretrained( config[model_path], quantization_configquantization_config, device_mapauto, trust_remote_codeTrue )建议2实现流式输出对于长文本翻译流式输出可以提升用户体验def stream_translate(text, source_lang, target_lang): 流式翻译边生成边输出 prompt fTranslate from {source_lang} to {target_lang}: {text} inputs tokenizer(prompt, return_tensorspt, truncationTrue, max_length512) inputs {k: v.to(model.device) for k, v in inputs.items()} # 使用流式生成 generated_tokens [] with torch.no_grad(): for token in model.generate( **inputs, max_new_tokens512, temperature0.7, do_sampleTrue, streamerNone # 可以自定义streamer ): # 解码当前token current_text tokenizer.decode(token, skip_special_tokensTrue) generated_tokens.append(current_text) # 实时输出在Web界面中可以实时更新 current_output .join(generated_tokens) if : in current_output: current_output current_output.split(:, 1)[1].strip() yield current_output # 使用yield实现流式输出建议3缓存常用翻译对于重复的翻译请求可以添加缓存机制from functools import lru_cache import hashlib lru_cache(maxsize1000) def cached_translate(text, source_lang, target_lang): 带缓存的翻译函数 # 生成缓存键 cache_key hashlib.md5( f{text}_{source_lang}_{target_lang}.encode() ).hexdigest() # 这里可以添加从缓存读取的逻辑 # 实际项目中可以使用Redis或数据库 # 如果缓存中没有执行翻译 result translate_text_interface(text, source_lang, target_lang) # 保存到缓存 # 实际项目中保存到缓存系统 return result5.3 扩展功能建议扩展1添加文件翻译功能import docx from PyPDF2 import PdfReader def translate_file(file_path, source_langauto, target_langzh): 翻译整个文件 if file_path.endswith(.txt): with open(file_path, r, encodingutf-8) as f: content f.read() elif file_path.endswith(.docx): doc docx.Document(file_path) content \n.join([para.text for para in doc.paragraphs]) elif file_path.endswith(.pdf): reader PdfReader(file_path) content for page in reader.pages: content page.extract_text() else: return 不支持的文件格式 # 分段翻译避免过长文本 segments content.split(\n\n) # 按空行分段 translated_segments [] for segment in segments: if segment.strip(): translated translate_text_interface(segment, source_lang, target_lang) translated_segments.append(translated) return \n\n.join(translated_segments)扩展2集成到现有系统如果你想把TranslateGemma集成到自己的项目中可以创建一个简单的API服务from fastapi import FastAPI, HTTPException from pydantic import BaseModel import uvicorn app FastAPI(titleTranslateGemma API) class TranslationRequest(BaseModel): text: str source_lang: str auto target_lang: str zh class TranslationResponse(BaseModel): translated_text: str source_lang: str target_lang: str app.post(/translate, response_modelTranslationResponse) async def translate_text(request: TranslationRequest): try: translated translate_text_interface( request.text, request.source_lang, request.target_lang ) return TranslationResponse( translated_texttranslated, source_langrequest.source_lang, target_langrequest.target_lang ) except Exception as e: raise HTTPException(status_code500, detailstr(e)) if __name__ __main__: # 先加载模型 load_model() # 启动API服务 uvicorn.run(app, host0.0.0.0, port8000)这样你就可以通过HTTP请求来调用翻译服务了curl -X POST http://localhost:8000/translate \ -H Content-Type: application/json \ -d {text: Hello, world!, source_lang: en, target_lang: zh}6. 总结与下一步建议通过这篇教程你已经成功地在本地部署了TranslateGemma翻译模型并学会了如何通过Python代码和Web界面来使用它。让我们回顾一下关键步骤环境准备确认硬件配置安装必要的软件依赖模型部署下载模型文件配置双卡并行启动翻译服务基础使用通过Python脚本调用翻译功能尝试不同场景界面构建用Gradio创建用户友好的Web界面问题解决了解常见问题的解决方法学习性能优化技巧现在你已经拥有了一个完全本地化的高质量翻译系统。相比在线翻译服务它的优势很明显数据隐私有保障翻译质量可控制使用不受网络限制。对于处理敏感文档、需要专业翻译、或者网络环境不稳定的场景这个方案特别有价值。下一步你可以尝试探索更多语言对TranslateGemma支持多种语言试试其他语言组合的翻译效果优化性能尝试不同的量化策略找到速度和质量的最佳平衡点集成到工作流把翻译功能集成到你常用的工具中比如编辑器插件、办公软件扩展尝试高级功能探索模型的代码理解、文档翻译等高级能力技术的价值在于应用。现在你有了这个强大的工具可以思考如何让它更好地服务于你的具体需求。无论是学术研究、内容创作、还是软件开发一个可靠的本地翻译助手都能显著提升工作效率。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。

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