当前位置: 首页 > article >正文

Qwen3-ASR-1.7B开源大模型教程:PyTorch 2.5.0 + CUDA 12.4环境配置

Qwen3-ASR-1.7B开源大模型教程PyTorch 2.5.0 CUDA 12.4环境配置1. 引言为什么选择Qwen3-ASR-1.7B如果你正在寻找一个开箱即用、功能强大的语音识别解决方案Qwen3-ASR-1.7B绝对值得你花时间了解。这个由阿里通义千问团队推出的端到端语音识别模型在很多方面都让人眼前一亮。想象一下这样的场景你需要把一段会议录音转成文字但录音里既有中文又有英文还可能夹杂着一些专业术语。传统方案要么需要切换不同模型要么识别准确率不够理想。Qwen3-ASR-1.7B直接解决了这个问题——它支持中、英、日、韩、粤五种语言还能自动检测当前说的是什么语言完全不需要你手动切换。更让人惊喜的是这个模型在完全离线环境下就能运行。这意味着你的音频数据不需要上传到任何云端服务器特别适合处理敏感内容或者在没有网络的环境中使用。模型大小17亿参数听起来不小但实际部署起来比想象中要简单得多。在这篇教程里我会手把手带你完成整个环境配置和部署过程。无论你是语音识别的新手还是有一定经验的开发者都能跟着步骤快速上手。我们用的环境是PyTorch 2.5.0 CUDA 12.4这是目前比较新的组合能充分发挥GPU的性能优势。2. 环境准备你需要什么2.1 硬件要求在开始之前我们先看看需要什么样的硬件环境。Qwen3-ASR-1.7B对硬件的要求比较明确主要是显存和存储空间。显存要求这是最关键的一点。模型推理时大约需要10-14GB的显存。这个数字包含了模型权重5.5GB和推理过程中的临时缓存。如果你用的是RTX 309024GB、RTX 409024GB或者A10040GB/80GB那完全没问题。如果是RTX 308010GB或者RTX 407012GB也能运行但可能需要在一些设置上做些调整。存储空间你需要准备大约15GB的可用磁盘空间。这包括模型文件5.5GB两个分片文件Python环境3-4GB临时文件和工作空间2-3GB其他硬件CPU要求不高现代的多核处理器都能胜任。内存建议16GB以上这样运行起来会更流畅。2.2 软件环境软件环境我们选择的是比较新的组合这样既能保证稳定性又能获得更好的性能。操作系统推荐使用Ubuntu 20.04或22.04。这两个版本都有很好的CUDA支持和社区维护。如果你用Windows也不是不行但Linux环境下的部署会更顺畅一些。Python版本我们使用Python 3.11。这个版本在性能和兼容性上都有不错的表现。不建议用太老的Python版本因为一些新的依赖包可能不支持。CUDA版本CUDA 12.4。这是NVIDIA最新的稳定版本之一对新一代GPU有更好的支持。如果你用的是比较老的GPU比如30系列之前的可能需要用CUDA 11.x版本但整体流程是类似的。PyTorch版本PyTorch 2.5.0。这个版本修复了很多之前的问题而且在推理性能上有明显提升。3. 一步步搭建环境3.1 第一步安装CUDA 12.4CUDA是NVIDIA的GPU计算平台我们需要先把它装好。如果你已经装了其他版本的CUDA建议先卸载干净避免版本冲突。打开终端执行以下命令# 下载CUDA 12.4的安装包 wget https://developer.download.nvidia.com/compute/cuda/12.4.0/local_installers/cuda_12.4.0_550.54.14_linux.run # 给安装包添加执行权限 chmod x cuda_12.4.0_550.54.14_linux.run # 运行安装程序 sudo ./cuda_12.4.0_550.54.14_linux.run安装过程中有几个选项需要注意当问你是否接受许可协议时输入accept然后回车在组件选择界面确保CUDA Toolkit 12.4被选中其他组件可以根据需要选择驱动安装部分如果你已经装了合适的NVIDIA驱动可以取消选择Driver避免重复安装安装完成后需要配置环境变量。编辑你的~/.bashrc文件nano ~/.bashrc在文件末尾添加这几行export PATH/usr/local/cuda-12.4/bin:$PATH export LD_LIBRARY_PATH/usr/local/cuda-12.4/lib64:$LD_LIBRARY_PATH export CUDA_HOME/usr/local/cuda-12.4保存退出后让配置生效source ~/.bashrc验证安装是否成功nvcc --version如果看到类似Cuda compilation tools, release 12.4的输出说明CUDA安装成功了。3.2 第二步安装PyTorch 2.5.0PyTorch的安装现在很简单直接用pip就能搞定。但要注意选择正确的版本确保和CUDA 12.4兼容。# 创建并激活Python虚拟环境推荐 python3.11 -m venv asr_env source asr_env/bin/activate # 安装PyTorch 2.5.0 CUDA 12.4 pip install torch2.5.0 torchvision0.20.0 torchaudio2.5.0 --index-url https://download.pytorch.org/whl/cu124这里有几个细节需要注意cu124表示CUDA 12.4一定要写对如果你用的是其他CUDA版本需要调整这个后缀安装过程可能会比较慢因为要下载比较大的文件安装完成后验证PyTorch是否能正确识别GPUimport torch print(fPyTorch版本: {torch.__version__}) print(fCUDA是否可用: {torch.cuda.is_available()}) print(fGPU数量: {torch.cuda.device_count()}) print(f当前GPU: {torch.cuda.get_device_name(0)})如果一切正常你应该能看到类似这样的输出PyTorch版本: 2.5.0cu124 CUDA是否可用: True GPU数量: 1 当前GPU: NVIDIA GeForce RTX 40903.3 第三步安装其他依赖包除了PyTorch我们还需要一些其他的Python包。这些包主要是用于Web服务、音频处理和模型加载。创建一个requirements.txt文件fastapi0.104.1 gradio4.13.0 uvicorn[standard]0.24.0 numpy1.24.3 scipy1.11.4 librosa0.10.1 soundfile0.12.1 transformers4.36.2 accelerate0.25.0 safetensors0.4.1 qwen-asr0.1.0然后一次性安装所有依赖pip install -r requirements.txt这里特别说明一下几个关键的包fastapi和gradio用于构建Web界面和API服务librosa和soundfile处理音频文件qwen-asr这是阿里官方的SDK封装了模型的加载和推理逻辑如果安装qwen-asr时遇到问题可能是因为网络原因。你可以尝试从镜像源安装pip install qwen-asr -i https://pypi.tuna.tsinghua.edu.cn/simple4. 下载和配置模型4.1 获取模型文件Qwen3-ASR-1.7B的模型文件可以从魔搭社区下载。官方提供了两个分片文件总共约5.5GB。我们先创建一个目录来存放模型mkdir -p models/Qwen3-ASR-1.7B cd models/Qwen3-ASR-1.7B如果你能直接访问魔搭社区可以用git命令下载git lfs install git clone https://www.modelscope.cn/qwen/Qwen3-ASR-1.7B.git .如果网络不太稳定也可以手动下载。模型文件通常包括model.safetensors.index.json模型索引文件model-00001-of-00002.safetensors第一个分片model-00002-of-00002.safetensors第二个分片config.json模型配置文件tokenizer.json等分词器文件4.2 验证模型完整性下载完成后最好验证一下文件是否完整。可以检查文件大小和数量# 查看文件列表 ls -lh # 预期的输出应该类似这样 # -rw-r--r-- 1 user user 15K Dec 1 10:30 config.json # -rw-r--r-- 1 user user 2.8G Dec 1 10:30 model-00001-of-00002.safetensors # -rw-r--r-- 1 user user 2.7G Dec 1 10:31 model-00002-of-00002.safetensors # -rw-r--r-- 1 user user 1.2M Dec 1 10:30 tokenizer.json两个.safetensors文件加起来应该是5.5GB左右。如果大小不对可能需要重新下载。5. 编写启动脚本5.1 创建启动脚本为了让使用更方便我们创建一个启动脚本。这个脚本会启动两个服务FastAPI后端和Gradio前端。创建一个名为start_asr_1.7b.sh的文件#!/bin/bash # 设置环境变量 export PYTHONPATH/path/to/your/project:$PYTHONPATH export MODEL_PATH/path/to/models/Qwen3-ASR-1.7B # 激活虚拟环境 source /path/to/asr_env/bin/activate # 启动FastAPI后端服务 echo 启动FastAPI后端服务端口7861... uvicorn asr_api:app --host 0.0.0.0 --port 7861 --reload # 等待后端启动 sleep 5 # 启动Gradio前端服务 echo 启动Gradio前端界面端口7860... python gradio_ui.py记得修改脚本中的路径确保指向你实际的项目目录和模型目录。给脚本添加执行权限chmod x start_asr_1.7b.sh5.2 创建API服务文件接下来创建FastAPI的后端服务。新建一个asr_api.py文件from fastapi import FastAPI, File, UploadFile, HTTPException from fastapi.responses import JSONResponse import torch import torchaudio import numpy as np from typing import Optional import tempfile import os import time # 导入qwen-asr from qwen_asr import QwenASRPipeline app FastAPI(titleQwen3-ASR-1.7B API服务) # 全局变量用于缓存模型 _model None _device None def load_model(): 加载ASR模型 global _model, _device if _model is not None: return _model, _device print(正在加载Qwen3-ASR-1.7B模型...) start_time time.time() # 设置设备 _device cuda if torch.cuda.is_available() else cpu print(f使用设备: {_device}) # 加载模型 try: # 这里需要根据你的实际模型路径调整 model_path /path/to/models/Qwen3-ASR-1.7B _model QwenASRPipeline.from_pretrained( model_path, torch_dtypetorch.float16 if _device cuda else torch.float32, device_map_device ) print(f模型加载完成耗时: {time.time() - start_time:.2f}秒) except Exception as e: print(f模型加载失败: {e}) raise return _model, _device app.on_event(startup) async def startup_event(): 应用启动时加载模型 load_model() app.post(/api/transcribe) async def transcribe_audio( audio_file: UploadFile File(...), language: Optional[str] auto ): 转录音频文件 Args: audio_file: 上传的音频文件WAV格式 language: 语言代码可选值auto, zh, en, ja, ko, yue # 检查文件类型 if not audio_file.filename.lower().endswith(.wav): raise HTTPException(status_code400, detail只支持WAV格式音频文件) # 加载模型 model, device load_model() # 保存上传的文件到临时位置 with tempfile.NamedTemporaryFile(deleteFalse, suffix.wav) as tmp_file: content await audio_file.read() tmp_file.write(content) tmp_path tmp_file.name try: # 读取音频文件 waveform, sample_rate torchaudio.load(tmp_path) # 转换为单声道如果需要 if waveform.shape[0] 1: waveform waveform.mean(dim0, keepdimTrue) # 重采样到16kHz如果需要 if sample_rate ! 16000: resampler torchaudio.transforms.Resample(sample_rate, 16000) waveform resampler(waveform) # 转换为numpy数组 audio_np waveform.numpy().squeeze() # 执行语音识别 start_time time.time() result model( audio_np, languagelanguage, tasktranscribe ) inference_time time.time() - start_time # 清理临时文件 os.unlink(tmp_path) # 返回结果 return JSONResponse({ status: success, language: result.get(language, unknown), text: result.get(text, ), inference_time: f{inference_time:.2f}秒, audio_duration: f{len(audio_np) / 16000:.2f}秒 }) except Exception as e: # 清理临时文件 if os.path.exists(tmp_path): os.unlink(tmp_path) raise HTTPException(status_code500, detailf处理失败: {str(e)}) app.get(/api/health) async def health_check(): 健康检查接口 return {status: healthy, model_loaded: _model is not None} if __name__ __main__: import uvicorn uvicorn.run(app, host0.0.0.0, port7861)5.3 创建Web界面再创建一个Gradio的前端界面文件gradio_ui.pyimport gradio as gr import requests import json import tempfile import os # API地址 API_URL http://localhost:7861/api/transcribe def transcribe_audio(audio_file, language): 调用API进行语音识别 Args: audio_file: 上传的音频文件 language: 选择的语言 if audio_file is None: return 请先上传音频文件, , try: # 准备文件 files {audio_file: open(audio_file, rb)} data {language: language} # 调用API response requests.post(API_URL, filesfiles, datadata) # 关闭文件 files[audio_file].close() if response.status_code 200: result response.json() # 格式化输出 language_map { zh: 中文, en: 英文, ja: 日语, ko: 韩语, yue: 粤语, auto: 自动检测 } detected_lang result.get(language, auto) display_lang language_map.get(detected_lang, detected_lang) formatted_output f 识别结果 ━━━━━━━━━━━━━━━━━━━ 识别语言{display_lang} 识别内容{result.get(text, )} ━━━━━━━━━━━━━━━━━━━ ⏱️ 处理时间{result.get(inference_time, N/A)} 音频时长{result.get(audio_duration, N/A)} return formatted_output, result.get(text, ), display_lang else: error_msg fAPI调用失败: {response.status_code}\n{response.text} return error_msg, , except Exception as e: return f处理过程中出错: {str(e)}, , # 创建Gradio界面 with gr.Blocks(titleQwen3-ASR-1.7B 语音识别系统, themegr.themes.Soft()) as demo: gr.Markdown(# Qwen3-ASR-1.7B 语音识别系统) gr.Markdown(上传WAV格式音频文件选择识别语言点击开始识别) with gr.Row(): with gr.Column(scale1): # 语言选择 language gr.Dropdown( choices[auto, zh, en, ja, ko, yue], valueauto, label识别语言, infoauto: 自动检测语言zh: 中文en: 英文ja: 日语ko: 韩语yue: 粤语 ) # 音频上传 audio_input gr.Audio( typefilepath, label上传音频文件, info支持WAV格式建议时长5-30秒 ) # 识别按钮 transcribe_btn gr.Button( 开始识别, variantprimary) with gr.Column(scale2): # 结果显示 output_text gr.Textbox( label识别结果, lines10, interactiveFalse ) # 原始文本隐藏用于复制 raw_text gr.Textbox(label原始文本, visibleFalse) detected_lang gr.Textbox(label检测到的语言, visibleFalse) # 示例音频 gr.Markdown(### 示例音频) with gr.Row(): gr.Examples( examples[ [examples/chinese_sample.wav, zh], [examples/english_sample.wav, en], [examples/japanese_sample.wav, ja] ], inputs[audio_input, language], label点击示例快速测试 ) # 绑定事件 transcribe_btn.click( fntranscribe_audio, inputs[audio_input, language], outputs[output_text, raw_text, detected_lang] ) # 说明文字 gr.Markdown( ### 使用说明 1. **上传音频**点击上传按钮选择WAV格式的音频文件 2. **选择语言**如果知道音频语言选择对应选项不确定就选auto 3. **开始识别**点击开始识别按钮等待1-3秒 4. **查看结果**识别结果会显示在右侧文本框 ### 注意事项 - 支持中文、英文、日语、韩语、粤语五种语言 - 自动检测模式auto可以识别音频中的语言类型 - 建议使用16kHz采样率的单声道WAV文件 - 单次处理建议不超过5分钟音频 ) if __name__ __main__: demo.launch( server_name0.0.0.0, server_port7860, shareFalse )6. 启动和测试服务6.1 启动服务现在一切准备就绪我们可以启动服务了。确保你在项目根目录然后运行bash start_asr_1.7b.sh你会看到类似这样的输出启动FastAPI后端服务端口7861... INFO: Started server process [12345] INFO: Waiting for application startup. INFO: Application startup complete. INFO: Uvicorn running on http://0.0.0.0:7861 (Press CTRLC to quit) 正在加载Qwen3-ASR-1.7B模型... 使用设备: cuda 模型加载完成耗时: 18.23秒 启动Gradio前端界面端口7860... Running on local URL: http://0.0.0.0:7860第一次启动时模型加载需要一些时间大约15-20秒因为要把5.5GB的模型权重加载到GPU显存中。之后再次启动就会快很多。6.2 测试服务打开浏览器访问http://你的服务器IP:7860就能看到Web界面了。我们来做个简单的测试准备测试音频你可以用手机录一段5-10秒的语音保存为WAV格式。如果不想录音也可以用下面的Python代码生成一个测试文件import numpy as np import soundfile as sf # 生成一段测试音频中文 sample_rate 16000 duration 5 # 5秒 t np.linspace(0, duration, int(sample_rate * duration)) # 生成一个简单的音调 audio 0.5 * np.sin(2 * np.pi * 440 * t) # 440Hz的正弦波 # 保存为WAV文件 sf.write(test_audio.wav, audio, sample_rate) print(测试音频已保存为 test_audio.wav)在Web界面上传音频点击上传音频文件区域选择你刚才创建的test_audio.wav文件在语言选择下拉框中选择zh中文或者保持auto开始识别点击 开始识别按钮按钮会变成识别中...并暂时禁用等待1-3秒结果会显示在右侧查看结果 如果一切正常你会看到格式化的识别结果包括检测到的语言和转写的文字。6.3 API接口测试除了Web界面你也可以直接测试API接口。打开另一个终端用curl命令测试# 测试健康检查接口 curl http://localhost:7861/api/health # 上传音频文件进行识别 curl -X POST http://localhost:7861/api/transcribe \ -F audio_filetest_audio.wav \ -F languagezhAPI会返回JSON格式的结果{ status: success, language: Chinese, text: 这是一个测试音频文件, inference_time: 1.23秒, audio_duration: 5.00秒 }7. 常见问题解决在部署和使用过程中你可能会遇到一些问题。这里整理了一些常见问题和解决方法。7.1 模型加载失败问题现象启动时卡在正在加载模型或者报错退出。可能原因和解决显存不足检查GPU显存是否足够10GB。可以用nvidia-smi命令查看。nvidia-smi如果显存不足可以尝试关闭其他占用显存的程序使用torch.float32而不是torch.float16但需要更多显存换用更大显存的GPU模型文件损坏重新下载模型文件确保两个.safetensors文件完整。# 检查文件大小 ls -lh model-*.safetensors # 应该看到两个2.7G左右的文件CUDA版本不匹配确保PyTorch版本和CUDA版本匹配。import torch print(torch.version.cuda) # 应该输出12.47.2 音频处理问题问题现象上传音频后识别失败或者识别结果乱码。可能原因和解决音频格式不支持目前只支持WAV格式。如果是MP3或其他格式需要先转换。# 用pydub转换音频格式 from pydub import AudioSegment # MP3转WAV audio AudioSegment.from_mp3(input.mp3) audio.export(output.wav, formatwav)采样率问题模型要求16kHz采样率。如果音频不是这个采样率可以这样转换import librosa import soundfile as sf # 读取并重采样 y, sr librosa.load(input.wav, sr16000) sf.write(output_16k.wav, y, 16000)音频太长建议单次处理不超过5分钟。如果音频太长可以分段处理import numpy as np def split_audio(audio, sr, segment_duration300): # 300秒5分钟 segment_length segment_duration * sr num_segments int(np.ceil(len(audio) / segment_length)) segments [] for i in range(num_segments): start i * segment_length end min((i 1) * segment_length, len(audio)) segments.append(audio[start:end]) return segments7.3 性能优化建议如果你发现识别速度不够快或者想优化资源使用可以试试这些方法批处理如果需要处理多个音频文件可以批量处理提高效率。# 批量处理示例 def batch_transcribe(audio_files, languageauto): results [] for audio_file in audio_files: result transcribe_audio(audio_file, language) results.append(result) return results调整精度如果显存紧张可以尝试使用8位量化需要模型支持。# 注意Qwen3-ASR-1.7B可能需要特定配置支持8位推理 model QwenASRPipeline.from_pretrained( model_path, torch_dtypetorch.float16, load_in_8bitTrue, # 8位量化 device_mapauto )使用更快的存储如果模型加载很慢可以尝试把模型放在SSD而不是HDD上。8. 实际应用示例8.1 会议录音转文字假设你有一段会议录音需要转成文字稿。录音里可能有不同人的发言还有中英文混杂的情况。import os from datetime import datetime def meeting_transcription(audio_path, output_dirtranscripts): 处理会议录音生成带时间戳的文字稿 Args: audio_path: 会议录音文件路径 output_dir: 输出目录 # 创建输出目录 os.makedirs(output_dir, exist_okTrue) # 生成输出文件名 timestamp datetime.now().strftime(%Y%m%d_%H%M%S) output_file os.path.join(output_dir, fmeeting_{timestamp}.txt) # 识别音频 result transcribe_audio(audio_path, languageauto) # 保存结果 with open(output_file, w, encodingutf-8) as f: f.write(f会议转录记录 - {timestamp}\n) f.write( * 50 \n\n) f.write(f检测语言: {result[language]}\n) f.write(f转录内容:\n\n{result[text]}\n\n) f.write( * 50 \n) f.write(f处理时间: {result[inference_time]}\n) f.write(f音频时长: {result[audio_duration]}\n) print(f转录完成结果已保存到: {output_file}) return output_file # 使用示例 meeting_transcription(meeting_recording.wav)8.2 多语言内容审核如果你需要审核包含多种语言的音频内容可以用自动检测模式def content_moderation(audio_path, keywords): 内容审核检查音频中是否包含敏感关键词 Args: audio_path: 音频文件路径 keywords: 敏感关键词列表 # 识别音频内容 result transcribe_audio(audio_path, languageauto) text result[text].lower() detected_lang result[language] print(f检测到语言: {detected_lang}) print(f转录内容: {text[:200]}...) # 只显示前200字符 # 检查关键词 found_keywords [] for keyword in keywords: if keyword.lower() in text: found_keywords.append(keyword) if found_keywords: print(f⚠️ 发现敏感词: {, .join(found_keywords)}) return False, found_keywords else: print(✅ 内容审核通过) return True, [] # 使用示例 keywords [暴力, 攻击, 违禁, illegal, attack] content_moderation(user_audio.wav, keywords)8.3 集成到现有系统如果你想把语音识别集成到自己的系统中可以这样调用APIimport requests import json class ASRClient: 语音识别客户端 def __init__(self, api_urlhttp://localhost:7861): self.api_url api_url def transcribe(self, audio_path, languageauto): 转录音频文件 with open(audio_path, rb) as f: files {audio_file: f} data {language: language} response requests.post( f{self.api_url}/api/transcribe, filesfiles, datadata ) if response.status_code 200: return response.json() else: raise Exception(fAPI调用失败: {response.status_code}) def batch_transcribe(self, audio_paths, languageauto): 批量转录 results [] for path in audio_paths: try: result self.transcribe(path, language) results.append({ file: path, success: True, result: result }) except Exception as e: results.append({ file: path, success: False, error: str(e) }) return results # 使用示例 client ASRClient() result client.transcribe(test.wav, languagezh) print(f识别结果: {result[text]})9. 总结通过这篇教程你应该已经成功搭建了Qwen3-ASR-1.7B的完整运行环境。我们来回顾一下关键步骤环境搭建的核心要点硬件准备确保有足够的GPU显存10-14GB软件安装正确安装CUDA 12.4和PyTorch 2.5.0模型下载从魔搭社区获取完整的模型文件服务部署配置FastAPI后端和Gradio前端测试验证通过Web界面和API接口测试功能这个方案的主要优势多语言支持一套模型处理五种语言还能自动检测完全离线数据不需要上传到云端保护隐私部署简单预置的镜像和脚本让部署变得很容易性能不错实时因子RTF0.310秒音频只要1-3秒就能处理完实际使用建议音频预处理尽量使用16kHz、单声道的WAV文件分段处理长音频先切成5分钟以内的小段语言选择如果知道音频语言明确指定可以提高准确率错误处理在代码中加入适当的异常处理和重试机制下一步可以探索的方向性能优化尝试批处理、量化等优化手段功能扩展集成VAD语音活动检测分割长音频系统集成把语音识别集成到你的业务系统中定制化如果需要特定领域的识别可以考虑微调模型语音识别技术正在快速发展Qwen3-ASR-1.7B作为一个开源方案为开发者提供了一个很好的起点。无论是做会议转录、内容审核还是构建语音交互应用这个模型都能提供不错的支持。最重要的是整个系统可以在你的本地环境运行不需要依赖任何外部服务。这对于数据安全要求高的场景特别有价值。希望这篇教程能帮助你快速上手。如果在部署过程中遇到问题或者有新的使用心得欢迎分享交流。技术总是在实践中不断进步的动手试试看你会发现语音识别并没有想象中那么复杂。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。

相关文章:

Qwen3-ASR-1.7B开源大模型教程:PyTorch 2.5.0 + CUDA 12.4环境配置

Qwen3-ASR-1.7B开源大模型教程:PyTorch 2.5.0 CUDA 12.4环境配置 1. 引言:为什么选择Qwen3-ASR-1.7B? 如果你正在寻找一个开箱即用、功能强大的语音识别解决方案,Qwen3-ASR-1.7B绝对值得你花时间了解。这个由阿里通义千问团队推…...

各品牌电脑原厂OEM系统下载大全-纯净系统重装与恢复首选【宇程系统站】

在日常电脑使用过程中,系统卡顿、蓝屏、病毒感染等问题时有发生,很多用户都会选择重装系统来解决。但对于品牌电脑用户来说,普通系统镜像往往无法完整还原原厂环境,例如驱动缺失、功能不完整、无法自动激活等问题频繁出现。 因此&…...

APA第7版参考文献格式:3分钟解决Word引用难题

APA第7版参考文献格式:3分钟解决Word引用难题 【免费下载链接】APA-7th-Edition Microsoft Word XSD for generating APA 7th edition references 项目地址: https://gitcode.com/gh_mirrors/ap/APA-7th-Edition 还在为学术论文的参考文献格式而烦恼吗&#…...

Lychee-Rerank效果展示:半导体工艺文档与缺陷检测报告的技术特征对齐

Lychee-Rerank效果展示:半导体工艺文档与缺陷检测报告的技术特征对齐 1. 工具核心能力概览 Lychee-Rerank是一个专门为技术文档相关性评分设计的本地化工具,它能够精准判断查询语句与候选文档之间的匹配程度。在半导体制造这种技术密集型的行业中&…...

一道基础计算题卡在 分,求助判题规则问题蔽

指令替换 项目需求:将加法指令替换为减法 项目目录如下 /MyProject ├── CMakeLists.txt # CMake 配置文件 ├── build/ #构建目录 │ └── test.c #测试编译代码 └── mypass2.cpp # pass 项目代码 一,测试代码示例 test.c // test.c #includ…...

百川2-13B-4bits量化版保姆级教程:nvidia-smi监控、端口诊断、防火墙开放全步骤详解

百川2-13B-4bits量化版保姆级教程:nvidia-smi监控、端口诊断、防火墙开放全步骤详解 1. 项目介绍:为什么选择百川2-13B-4bits? 如果你正在寻找一个能在消费级显卡上流畅运行的中文大语言模型,百川2-13B-Chat-4bits绝对值得你花时…...

将 fnOS 从 eMMC/TF 卡无损迁移至外部存储(NVMe/USB/SATA/TF)的完整方案 —— 适用于瑞芯微 RK 系列平台(含小容量盘适配)

将 fnOS 从 eMMC 无损迁移至 NVMe SSD 日常用 ARM 设备,总习惯把固件刷进 eMMC 或者 TF 卡。eMMC 读写慢,寿命有限,用久了总觉得差口气。我手头有块 NanoPC-T4,给它刷了 Arm 飞牛固件简单体验了一下,就琢磨&#xff1a…...

扩散模型对抗样本经典baselines窒

一、简化查询 1. 先看一下查询的例子 /// /// 账户获取服务 /// /// /// public class AccountGetService(AccountTable table, IShadowBuilder builder) {private readonly SqlSource _source new(builder.DataSource);private readonly IParamQuery _accountQuery build…...

痞子衡嵌入式:turbo-spiboot - 一种基于MCUBoot协议的二级SPI加载APP提速方案犹

前面我们对 Kafka 的整体架构和一些关键的概念有了一个基本的认知,本文主要介绍 Kafka 的一些配置参数。掌握这些参数的作用对我们的运维和调优工作还是非常有帮助的。 写在前面 Kafka 作为一个成熟的事件流平台,有非常多的配置参数。详细的参数列表可以…...

告别命令行恐惧:在恒源云GPU服务器上部署Linux桌面环境全攻略

1. 为什么需要Linux图形化桌面环境? 很多刚接触GPU服务器的开发者都有这样的经历:好不容易申请到一台高性能的恒源云GPU服务器,登录后却只能面对黑漆漆的命令行界面。对于习惯Windows或Mac图形界面的用户来说,这就像突然被扔进了原…...

Spring with AI (): 搜索扩展——向量数据库与RAG(下)馗

. GIF文件结构 相比于 WAV 文件的简单粗暴,GIF 的结构要精密得多,因为它天生是为了网络传输而设计的(包含了压缩机制)。 当我们用二进制视角观察 GIF 时,它是由一个个 数据块(Block) 组成的&…...

新手入门编程选C语言!超详细零基础入门指南请查收

新手入门编程,选对语言太关键!许多人有着想要学习编程的想法,然而却不清楚该从哪里开始着手——实际上C语言才是对于没有基础之人最为适宜的“敲门砖”。它身为编程领域的“老大哥”,不但语法秉持简洁的特点、易于让人掌握&#x…...

关于CUDA+QtCreator+OpenCV环境配置的一些注意事项

【以下内容不包含安装教程,仅用于环境报错时候自查】如果你在配置相关环境的时候遇到了类似以下报错:Cannot find CUDA installation; provide its path via --cuda-path, or pass -nocudainc to build without CUDA includes Cannot find libdevice for…...

When and Why to use Extensions -- VK_KHR_draw_indirect_count

VK_KHR_draw_indirect_count已晋升为 Vulkan 1.2 核心功能每次调用 vkCmdDraw 都会使用一组描述绘制命令的参数。为了批量执行绘制命令,相同的参数会以 VkDrawIndirectCommand 为单位存储在 VkBuffer 中。使用 vkCmdDrawIndirect 可以发起 drawCount 次绘制&#xf…...

千问 LeetCode 1359.有效的快递序列数目 public int countOrders(int n)

这道题要求计算 n 个订单所有有效的收件/配送序列数目,其中每个订单的配送(Delivery)必须在其收件(Pickup)之后。这是一个经典的组合数学问题,可以通过递推的方法来解决。💡 解题思路我们可以从…...

手把手教你用Qwen-Image-Edit-2511:小白也能玩的AI换装神器

手把手教你用Qwen-Image-Edit-2511:小白也能玩的AI换装神器 1. 快速认识AI换装神器 最近发现一个特别有意思的工具,能让普通人也能轻松玩转AI换装。这个叫Qwen-Image-Edit-2511的AI模型,是之前2509版本的升级版,主要解决了几个关…...

警惕!你的CV模型可能正在被欺骗:实测PGD对抗攻击在ResNet50上的破坏力

警惕!你的CV模型可能正在被欺骗:实测PGD对抗攻击在ResNet50上的破坏力 计算机视觉工程师们常常沉浸在模型准确率提升的喜悦中,却很少意识到一个残酷的现实:那些在测试集上表现优异的模型,可能正面临着看不见的威胁。上…...

嵌入式滤波器频率响应实时绘制库

1. FrequencyResponseDrawer 库概述FrequencyResponseDrawer 是一个面向嵌入式平台的轻量级 C 类库,专为在资源受限的微控制器上实时绘制数字滤波器频率响应曲线而设计。其核心目标并非替代 MATLAB 或 Python 的科学计算能力,而是解决嵌入式系统中一个典…...

5. 联合类型和交叉类型的区别是什么?

目录 一、 第一层:从“集合论”定性(底层逻辑) 二、 第二层:成员访问的“悖论” (技术深度点) 1. 联合类型的“访问收缩” 2. 交叉类型的“属性扩张” 三、 第三层:实战场景(展…...

php方案 Beanstalkd

安装 composer require pda/pheanstalk monolog/monolog ---项目结构src/├──…...

批量PDF合并工具使用说明:批量合并与直接合并两种模式,拖拽排序/页面范围/遍历子目录/重名自动处理

【批量PDF合并工具】用于把多个 PDF 合并成一个 PDF,提供两种常用模式:批量合并:选择文件夹,让工具按规则自动收集并合并 PDF直接合并:把 PDF 拖到列表里,手动调整顺序后合并(更可控&#xff09…...

FreeRTOS 线程本地存储(TLS)实战指南:从原理到应用

1. 什么是FreeRTOS线程本地存储(TLS)? 想象一下你在办公室里工作,每个同事都有自己的抽屉存放私人物品。FreeRTOS的线程本地存储(Thread Local Storage,简称TLS)就是为每个任务(线程…...

VescUart库详解:嵌入式VESC UART通信协议与实时控制实践

1. VescUart库深度解析:面向嵌入式工程师的VESC UART通信全栈指南 1.1 库定位与工程价值 VescUart是一个专为嵌入式平台设计的轻量级UART通信库,核心目标是实现对VESC( Vedder Electronic Speed Controller)电调设备的可靠、低延…...

把 CTS 权限边界讲透,SAP 传输体系里的角色设计、授权对象与最小权限落地

很多团队在做 CTS 安全治理时,真正出问题的地方并不在 STMS 能不能打开,也不在 SE09 能不能看到请求,而是在权限边界画得太粗。开发、运维、项目负责人、Basis 管理员,本来承担的工作就不一样,结果大家都被塞进一套大而全的角色里,最后形成一种很典型的局面,开发能看不该…...

车辆三自由度运动学模型; Carsim_Simulink联合仿真; 无人驾驶车辆模型预测控制(2.1);

车辆三自由度运动学模型; Carsim/Simulink联合仿真; 无人驾驶车辆模型预测控制(2.1); 包括Carsim的设置、控制信号数据、PPT文件、cpar件、车辆运动分析图(适用于word两栏布局);Simu…...

华为OD机试真题 新系统2026-04-08 JavaGo 实现【直捣黄龙】

目录 题目 思路 Code 题目 小王在玩一款叫做直捣黄龙的小游戏,在该游戏中他需要从入口位置进入敌营,绕过哨兵的层层封锁,达到敌军司令部实施斩首行动。 敌军阵营是一个n*n的矩阵,入口在坐标(0,n/2),敌军司令部在坐标(n-1,n/2),每个哨兵警戒以自己为中心的9宫格,一旦被…...

Linux 进程控制(上):创建、终止、等待与程序替换

一. 进程控制概述进程是操作系统中的任务载体,而进程控制则是对其生命周期进行管理的完整机制在之前的博文中,我们已经窥探了进程的属性和地址空间,但进程并不会静止在那里。一个完善的操作系统必须能够解决以下问题:如何高效地克…...

An Introduction to RAID in Linux

1. Overview RAID stands for Redundant Array of Inexpensive/Independent Disks. We build our storage with redundancy — duplication of critical functions — so that no one part can fail and bring down our whole system. Because the data reads and writes are…...

数据结构-双向链表-基础

#include <iostream> #include <stdio.h> #include<stdlib.h>//双向链表存储结构 typedef int ElemType; typedef struct node {ElemType data;struct node* prev, * next; }Node;//初始化 Node* initList() {Node* head (Node*)malloc(sizeof(Node));head-…...

SCM 第二例|三大模型推理性能深度对比:InternLM 效率最高,Qwen 并发增益最强

SCM 第二例|三大模型推理性能深度对比:InternLM 效率最高,Qwen 并发增益最强 引言:从单模型验证到多模型对决 一个月前,我用自研的 叠合一致法(SCM) 完成了首例验证——在 Qwen2.5-7B 上,成功标定出并发增益函数和长度增益系数,实现了 0% 偏差的自洽检验。 但那篇文…...