用三权重的网站做友链有好处没湖南网站设计案例
2026/1/29 8:04:39 网站建设 项目流程
用三权重的网站做友链有好处没,湖南网站设计案例,长春企业自助建站,seo 资料包怎么获得前言#xff1a;最近在 GitCode 的 Notebook 环境里玩大模型#xff0c;想着试试看 Mistral-7B-Instruct-v0.2 在 Atlas 800T 上到底能跑成啥样。结果比我想象的顺利太多#xff0c;但也踩了几个坑。为了方便大家直接上手#xff0c;我把整个过程整理成了这篇教程#xff…前言最近在 GitCode 的 Notebook 环境里玩大模型想着试试看Mistral-7B-Instruct-v0.2在Atlas 800T上到底能跑成啥样。结果比我想象的顺利太多但也踩了几个坑。为了方便大家直接上手我把整个过程整理成了这篇教程尽量一步步手把手教你从环境准备到多轮对话再到性能监控。不管你之前有没有在 NPU 上跑过大模型也没关系我把我遇到的一系列问题都罗列出来相信你一看就能懂。1.环境准备Mistral-7B-Instruct-v0.2 是一款体积适中、指令理解能力很强的大语言模型很适合在 Notebook 上实验。我们这次用的环境是●平台GitCode 云端 Notebook●算力1 * Ascend 910B NPU、32 vCPU、64GB 内存●基础镜像Ubuntu 22.04 Python 3.11 CANN 8.2CANN 8.0 及以上就行确认环境没问题后先打开终端看看 NPU 状态输入指令npu-smi info如果能看到 NPU 列表和 AICore 信息就说明环境准备好了可以开始部署。2.依赖安装与模型获取2.1 依赖安装虽然昇腾官方镜像通常已经预装了 torch_npu确保了 PyTorch 在 NPU 上能够直接调用硬件算力但仅仅有 torch_npu 并不足以运行开源大模型。我们还必须安装 Hugging Face 的核心库特别是 transformers 和 accelerate因为它们提供了模型加载、Tokenizer、生成器、分布式推理等功能是整个推理流程的基础。在终端输入指令pipinstalltransformers accelerate sentencepiece protobuf为了避免 HuggingFace 下载慢或者断掉我们这次推荐用ModelScope SDK。安装起来很快在终端输入指令pipinstallmodelscope2.2 模型获取用 ModelScope 高速下载 Mistral-7B-Instruct-v0.2放在当前目录下的 models 文件夹里(之前就是在下载模型时没有留意安装位置导致后续出现很多没有必要的错误)我们在NoteBook上面新建一个后缀为 Mistral.ipynb的文件用来模型获取将以下代码填入后就会自动获取了模型获取代码frommodelscopeimportsnapshot_download model_dirsnapshot_download(LLM-Research/Mistral-7B-Instruct-v0.2,cache_dir./models,# 下载缓存路径revisionmaster)print(f模型下载成功:{model_dir})出现位置提示后代表我们的模型已经被成功获取2.3 测试用例因为出现提示后并不知道它能不能被我使用就先进行一个简单测试提前发现问题# inference_alt.pyimporttorchimporttorch_npu# 必须导入用于支持华为 Ascend NPUfromtransformersimportAutoTokenizer,AutoModelForCausalLMimporttime# --- 配置模型路径 ---MODEL_PATHmodels/LLM-Research/Mistral-7B-Instruct-v0___2defrun_custom_test(batch_size2):print(f[*] 加载 Mistral 模型到 NPU (Batch Size:{batch_size})...)# 1. 加载 TokenizertokenizerAutoTokenizer.from_pretrained(MODEL_PATH,trust_remote_codeTrue,padding_sideleft)iftokenizer.pad_tokenisNone:tokenizer.pad_tokentokenizer.eos_token# 2. 加载模型到 NPUtry:modelAutoModelForCausalLM.from_pretrained(MODEL_PATH,dtypetorch.float16,trust_remote_codeTrue,low_cpu_mem_usageTrue).to(npu:0)exceptExceptionase:print(f[!] 模型加载失败:{e})returnmodel.eval()print([] 模型加载成功)# 3. 自定义测试 promptprompts[Summarize the key points of climate change in simple terms.,Generate a short story about a robot learning emotions.]# 4. 编码inputstokenizer(prompts,return_tensorspt,paddingTrue,truncationTrue,max_length256).to(npu:0)# 5. 推理print(f[*] 正在执行{len(prompts)}条推理请求...)start_timetime.time()withtorch.no_grad():outputsmodel.generate(inputs.input_ids,attention_maskinputs.attention_mask,max_new_tokens150,do_sampleTrue,top_p0.9,temperature0.8,pad_token_idtokenizer.pad_token_id)end_timetime.time()# 6. 输出结果decoded_outputstokenizer.batch_decode(outputs,skip_special_tokensTrue)print(f\n[] 推理完成耗时:{end_time-start_time:.2f}秒\n)foridx,textinenumerate(decoded_outputs):print(fPrompt{idx1}:{prompts[idx]})print(fOutput:{text[len(prompts[idx]):].strip()[:200]}...\n)# 输出前200字符if__name____main__:run_custom_test()没错如我所料确实出现了问题导致我的测试代码并不能正常调用对于这个问题很显然是因为线程问题而崩溃解决方案就是在使用前进行一下配置exportOMP_NUM_THREADS1exportMKL_NUM_THREADS13.构建****Mistral-7B 对话小助手3.1 细节处理多轮对话上下文构建困难●现象在构建 Mistral-7B 对话小助手时首先考虑到的就是它的多轮对话上下文构建困难问题如果不保存历史模型无法理解对话上下文回复逻辑可能断裂●解决方案用 history 列表保存每轮用户和助手的内容并在 generate_response 中按顺序拼接生成文本长度过长导致算力或显存压力现象无限制生成可能导致 NPU 显存占满。解决方案在 generate_response 中设置了固定长度限制生成长度避免显存飙升。3.2work.py# chat_agent_alt.py# -*- coding: utf-8 -*-importosimportsysimportioimporttorchimporttorch_npufromtransformersimportAutoTokenizer,AutoModelForCausalLM# --- 1. 强制 UTF-8 避免中文报错 ---sys.stdoutio.TextIOWrapper(sys.stdout.buffer,encodingutf-8)sys.stdinio.TextIOWrapper(sys.stdin.buffer,encodingutf-8)# 限制 CPU 线程数os.environ[OMP_NUM_THREADS]1os.environ[MKL_NUM_THREADS]1# --- 模型路径 ---MODEL_PATHmodels/LLM-Research/Mistral-7B-Instruct-v0___2# --- Agent 配置 ---SYSTEM_PROMPT你是一个专业的数据分析助手。请用中文回答用户问题生成结果要清晰、逻辑分明。defgenerate_response(model,tokenizer,history,max_new_tokens256,temperature0.7):构造完整对话并生成模型回复# 构建对话文本dialogueSYSTEM_PROMPT\nforturninhistory:roleUserifturn[role]userelseAssistantdialoguef{role}:{turn[content]}\ndialogueAssistant: # 编码输入inputstokenizer([dialogue],return_tensorspt,paddingTrue,truncationTrue,max_length512).to(npu:0)# 停止符eos_ids[tokenizer.eos_token_id,tokenizer.convert_tokens_to_ids(/s)]# 生成withtorch.no_grad():output_idsmodel.generate(inputs.input_ids,attention_maskinputs.attention_mask,max_new_tokensmax_new_tokens,eos_token_ideos_ids,pad_token_idtokenizer.eos_token_id,do_sampleTrue,temperaturetemperature)# 解码回复reply_idsoutput_ids[0,inputs.input_ids.shape[1]:]reply_texttokenizer.decode(reply_ids,skip_special_tokensTrue).strip()returnreply_textdefmain():print([*] 正在加载模型到 NPU请稍候...)try:tokenizerAutoTokenizer.from_pretrained(MODEL_PATH,trust_remote_codeTrue,padding_sideleft)iftokenizer.pad_tokenisNone:tokenizer.pad_tokentokenizer.eos_tokenexceptExceptionase:print(fTokenizer 加载失败:{e})returntry:modelAutoModelForCausalLM.from_pretrained(MODEL_PATH,dtypetorch.float16,trust_remote_codeTrue,low_cpu_mem_usageTrue).to(npu:0)exceptExceptionase:print(f模型加载失败:{e})returnmodel.eval()print(\n*50)print( Mistral-7B 中文对话 Agent (增强版))print(输入 exit 或 CtrlC 退出)print(*50)history[]whileTrue:try:user_inputinput(\n User: ).strip()ifnotuser_input:continueifuser_input.lower()in[exit,quit]:print( 再见)breakhistory.append({role:user,content:user_input})replygenerate_response(model,tokenizer,history)print(f Agent:{reply})history.append({role:assistant,content:reply})exceptKeyboardInterrupt:print(\n退出...)breakexceptExceptionase:print(f\n发生错误:{e})breakif__name____main__:main()4.Misrtal-7B性能探索在测试时我想的是不要只是单轮生成固定 prompt 的计时而是展示 NPU 在更真实、多样场景下的推理能力。因此我决定采用批量多 prompt 并行推理●思路一次性给模型 N 条不同的 prompt同时生成文本测算整体吞吐量tokens/sec。●优点更贴近多用户并发请求场景展示 NPU 并行处理能力。# npu_benchmark_batch.pyimportosimporttimeimportpsutilimporttorchimporttorch_npufromtransformersimportAutoTokenizer,AutoModelForCausalLMfromtqdmimporttqdm# --- 1. 环境配置 ---os.environ[OMP_NUM_THREADS]1os.environ[MKL_NUM_THREADS]1# --- 2. 模型路径 设备 ---MODEL_PATHmodels/LLM-Research/Mistral-7B-Instruct-v0___2DEVICEnpu:0# --- 3. 测试参数 ---BATCH_SIZE4# 每次并行处理的 prompt 数量WARM_UP_ROUNDS2TEST_ROUNDS5MAX_NEW_TOKENS128defget_memory_usage():processpsutil.Process(os.getpid())returnprocess.memory_info().rss/1024/1024defrun_benchmark():print(*60)print( Mistral-7B NPU 批量多 prompt 基准测试)print(*60)# --- 加载模型 ---print(\n[1/3] 正在加载模型...)start_loadtime.time()try:tokenizerAutoTokenizer.from_pretrained(MODEL_PATH,trust_remote_codeTrue)modelAutoModelForCausalLM.from_pretrained(MODEL_PATH,dtypetorch.float16,trust_remote_codeTrue,low_cpu_mem_usageTrue).to(DEVICE)model.eval()exceptExceptionase:print(f❌ 模型加载失败:{e})returnload_timetime.time()-start_loadprint(f✅ 模型加载完成耗时:{load_time:.2f}s)print(f 内存占用:{get_memory_usage():.2f}MB)# --- 构建批量 prompt ---prompt_base[写一篇关于人工智能的短文。,用 Python 写一个冒泡排序算法示例。,解释量子力学中的叠加态。,生成一首关于冬天的诗。,帮我规划三天上海旅游行程。,总结区块链技术的原理和应用。,写一个小故事主题是友情。,解释什么是大数据并举例说明。]# 分 batchbatches[prompt_base[i:iBATCH_SIZE]foriinrange(0,len(prompt_base),BATCH_SIZE)]# --- 预热 ---print(\n[2/3] 预热阶段...)withtorch.no_grad():foriinrange(WARM_UP_ROUNDS):forbatchinbatches:inputstokenizer(batch,return_tensorspt,paddingTrue,truncationTrue,max_length256).to(DEVICE)model.generate(inputs.input_ids,max_new_tokens50,do_sampleFalse)print(f - 预热完成{i1}/{WARM_UP_ROUNDS})# --- 正式测试 ---print(f\n[3/3] 正式测试 ({TEST_ROUNDS}轮)...)total_tokens0total_time0withtorch.no_grad():forround_idxintqdm(range(TEST_ROUNDS),descBenchmarking):torch.npu.synchronize()t0time.time()forbatchinbatches:inputstokenizer(batch,return_tensorspt,paddingTrue,truncationTrue,max_length256).to(DEVICE)outputmodel.generate(inputs.input_ids,max_new_tokensMAX_NEW_TOKENS,do_sampleFalse,pad_token_idtokenizer.eos_token_id)generated_lenoutput.shape[1]-inputs.input_ids.shape[1]total_tokensgenerated_len*len(batch)torch.npu.synchronize()t1time.time()total_time(t1-t0)avg_speedtotal_tokens/total_timeprint(\n*60)print( 批量多 prompt 测试报告 (Mistral-7B Ascend NPU))print(*60)print(f 批大小:{BATCH_SIZE})print(f 平均推理速度:{avg_speed:.2f}tokens/sec)print(f 总耗时:{total_time:.2f}s)print(f 每轮生成长度:{MAX_NEW_TOKENS}tokens)print(*60)if__name____main__:run_benchmark()运行结果1.模型加载时间加载耗时: 33.89 秒内存占用: 2796.91 MB首次加载模型到 NPU 时需要把模型权重从磁盘读取、解压并搬运到显存所以耗时约 34 秒。内存占用约 2.8 GB这个值主要是 CPU 端缓存和模型参数占用的 RAM。对于 7B 参数级别模型这个表现非常正常。2.预热阶段预热两轮后NPU 已经完成必要算子编译和优化准备。这个阶段耗时短但非常关键它能让后续正式推理速度更稳定同时减少首次生成的延迟。正式测试● 测试轮数5● 批大小4 个 prompt 同时处理● 每条生成长度128 tokens3.性能指标平均推理速度: 82.15 tokens/sec总耗时: 62.33 秒● 82 tokens/sec 的速度意味着每秒可以生成约 82 个 token对于 NPU 单卡 FP16 精度环境这个速度对于交互式多轮对话和短文生成场景已经完全够用。● 总耗时 62 秒覆盖了 5 轮所有批次的推理说明 NPU 可以稳定处理批量请求算力利用充分。5.常见问题与解决方法问题一****模型加载与环境相关1.模型文件不存在 / 权重缺失OSError: Modelmodels/LLM-Research/Mistral-7B-Instruct-v0___2not found●原因模型路径不正确或者下载未完成。●解决确保使用 modelscope 或 transformers 成功下载并指定正确路径。2.加载大模型时内存不足RuntimeError: CUDA out of memory / NPU memory allocation failed●原因模型参数量大显存不足。●解决○ 控制批量大小 BATCH_SIZE○ 限制生成长度 max_new_tokens○ 使用 torch_npu.empty_cache() 回收显存。问题二****推理与生成阶段1.线程资源相关报错OpenBLAS blas_thread_init: pthread_create failedforthread XX of YY: Resource temporarily unavailable Segmentation fault●原因Linux 容器环境线程限制或 RLIMIT_NPROC 配额不足。●解决○ 在脚本中限制 CPU 线程数os.environ[“OMP_NUM_THREADS”] “1” os.environ[“MKL_NUM_THREADS”] “1”○ 避免同时启动过多进程。6.实战部署总结6.1 部署感想这一路走过来遇到了很多报错困难但是只要一步一步的解决也是能有所收获的遇到报错千万不要慌大部分报错都和线程数或显存占用相关调整批量大小或清理缓存即可。相比在 GPU 上跑开源模型这套组合报错更少、上手更快。同时在模型加载上首次加载模型到 NPU 会比较慢适当做一次预热推理可以明显提升后续响应速度。同时控制 batch size 和生成长度能让显存和算力使用更平稳不容易触发内存不足错误。简单总结Mistral-7B Atlas 800T NPU对新手非常友好只要掌握几个核心要点就能顺利跑起大模型实现高效推理和多轮对话。6.2 **** 部署方案总结经过完整验证Mistral-7B在 Atlas 800T Notebook 环境中可以顺利完成端到端部署。整体体验非常流畅而且几乎不需要做复杂的适配性修改。1.环境选型建议优先使用CANN 8.0 及以上版本能获得更全面的算子支持和更优的推理性能避免运行时报错或算力无法充分释放。2.安装Hugging Face的核心库3.注意线程问题进阶资源指引若需尝试更大参数规模的模型如 718B MoE 架构的 openPangu或申请更多昇腾算力资源可通过 AtomGit 社区获取官方支持●算力资源申请链接https://ai.gitcode.com/ascend-tribe/openPangu-Ultra-MoE-718B-V1.1?source_modulesearch_result_model声明本文基于开源社区模型Mistral-7B采用 PyTorch 原生适配方式完成部署与推理测试。测试结果仅用于验证功能可用性及 NPU 算力调用效果不代表该硬件平台或模型的最终性能上限。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询