河南省建设注册执业中心网站wordpress 定时发布 原理
2026/4/6 0:57:31 网站建设 项目流程
河南省建设注册执业中心网站,wordpress 定时发布 原理,wordpress 插件广告,盐城网站优化推广工作室1.前言 随着大模型技术在软件开发领域的深入应用#xff0c;越来越多的开发者开始尝试在本地或云端环境部署代码生成模型。华为昇腾#xff08;Ascend#xff09;计算产业随着 CANN 软件栈的不断成熟#xff0c;已成为运行各类开源 LLM 的重要算力底座。 本文将以 CodeLl…1.前言随着大模型技术在软件开发领域的深入应用越来越多的开发者开始尝试在本地或云端环境部署代码生成模型。华为昇腾Ascend计算产业随着 CANN 软件栈的不断成熟已成为运行各类开源 LLM 的重要算力底座。本文将以 CodeLlama 这一广受欢迎的代码生成模型为核心结合 GitCode Notebook 提供的在线开发环境讲解如何在本地或服务器的昇腾 NPU 环境中完成从依赖配置、模型加载到代码生成的完整流程。文章将通过结构化的流程讲解与可操作的示例代码引导你在昇腾生态中顺利完成 CodeLlama 的部署与运行。接下来我们就开始进行动手实践吧。GitCode官网https://gitcode.com/。2.GitCode Notebook 环境准备GitCode 是面向中国开发者的一站式代码协作与模型应用平台集成了开源仓库托管、在线运行环境、模型中心等能力。其中的 GitCode Notebook 提供了无需本地配置的云端交互式开发环境支持直接在浏览器中编写、运行和调试代码非常适合进行大模型试验与算子验证。进入Gitcode官网后在个人头像这边可以找到Notebook进入后需要先进行激活和资源确认我们根据自己的需要选择对应的资源激活成功后进入主界面在主界面我们可以看见控制台那么接下来我们就会使用控制台来做我们的实验了。进入控制台后发现这不就是我们熟悉的命令行吗那么接下来的话我们就正式开始吧。进入后会发现这其实就是我们非常熟悉控制台界面进入 Notebook 后第一件事不是急着写代码而是检查底层的 NPU 状态和软件栈版本。打开 Terminal输入以下命令# 查看 NPU 状态确认芯片健康及显存占用 npu-smi info从输出结果中我们能够明确的看到版本号以及功耗和温度等信息以及NPU等一切都是处于正常的状态那么接下来的话我们就可以正式的去进行实验了。首先我们先来进行一些必备的环境检查查看系统版本信息cat /etc/os-release检查python环境python3 --version python -c import torch; print(PyTorch 版本:, torch.__version__) python -c import torch_npu; print(torch_npu 版本:, torch_npu.__version__)当基础环境准备就绪后我们就可以开始进行下一步了在实际开发中我们可以参考CANN官网在官网中我们也可以找到快速入门的资料查看我们需要安装的一些必备的依赖安装一些python库pip3 install attrs cython numpy1.19.2,1.24.0 decorator sympy cffi pyyaml pathlib2 psutil protobuf3.20.0 scipy requests absl-py --user环境配置是重中之重当这些都做完后我们再进行下一步。3.CodeLlama 模型信息在本次实战中我选择使用CodeLlama因为它是专门针对代码生成和理解优化的大语言模型能够很好地体现大模型在实际推理任务中的表现。接下来我们先了解一下这个模型的一些核心的信息模型版本与规模CodeLlama 提供 7B、13B、34B 等多个版本我选择了7B 或 13B进行测试参数量适中方便在昇腾 NPU 上运行。模型能力专注于代码生成、补全和理解支持多种编程语言如 Python、C、Java 等。训练特点在大规模文本与代码数据上预训练并经过指令微调使模型能够根据提示生成高质量代码。选择理由这个模型既能满足生成任务的复杂性又不会因为显存过大而难以部署非常适合用来做 NPU 性能实测。在Hugging Face的官网里面我们可以找到相关的资料和信息4.模型加载接下来环境配置和模型信息我们都有所了解了那么现在我们就进入到模型加载的环节了。在模型选择方面的话我选择CodeLlama 7B-Instruct它参数适中既能体现推理性能又不会因为显存不足导致无法运行。加载 Tokenizer为了将输入文本转换为模型可处理的 token我先加载 tokenizerfrom transformers import AutoTokenizer model_name code-llama-7b-instruct tokenizer AutoTokenizer.from_pretrained(model_name)然后我将模型加载到昇腾 NPU并设置 FP16 精度以降低显存占用from transformers import AutoModelForCausalLM model AutoModelForCausalLM.from_pretrained( model_name, device_mapauto, # 自动选择 NPU 设备 torch_dtypetorch.float16 # 使用 FP16 提升性能 )注device_mapauto会自动把模型分配到可用的 NPU 上同时 FP16 精度可以在保证计算精度的前提下降低显存使用。我们接下来可以来验证一下模型是否加载成功import torch_npu from transformers import AutoTokenizer, AutoModelForCausalLM # 模型名称 model_name code-llama-7b-instruct # 加载 tokenizer tokenizer AutoTokenizer.from_pretrained(model_name) # 加载模型到 NPU model AutoModelForCausalLM.from_pretrained( model_name, device_mapauto, torch_dtypetorch.float16 ) # 验证模型是否在 NPU 上 device next(model.parameters()).device print(f模型已加载当前设备: {device}) # 测试一次简单推理 prompt def fibonacci(n): inputs tokenizer(prompt, return_tensorspt).to(device) outputs model.generate(**inputs, max_new_tokens10) # 输出生成结果 generated_text tokenizer.decode(outputs[0], skip_special_tokensTrue) print(生成结果:, generated_text)运行结果从运行结果我们可以得知当前模型已经加载成功了。5.基础推理演示在完成模型加载和 SGLang 部署后我就带大家开始进行 CodeLlama 的基础推理实验从简单代码生成到多输入批量推理展示 NPU 的实战效果。先尝试最基础的单条 prompt 生成from transformers import AutoTokenizer, AutoModelForCausalLM model_name code-llama-7b-instruct tokenizer AutoTokenizer.from_pretrained(model_name) model AutoModelForCausalLM.from_pretrained( model_name, device_mapauto, torch_dtypetorch.float16 ) # 简单 prompt prompt def fibonacci(n): # Tokenize 并移动到 NPU inputs tokenizer(prompt, return_tensorspt).to(next(model.parameters()).device) # 执行推理 outputs model.generate(**inputs, max_new_tokens50) generated_text tokenizer.decode(outputs[0], skip_special_tokensTrue) print(生成结果:\n, generated_text)运行结果批量推理在实际场景中我们经常需要同时处理多条请求我尝试批量推理prompts [ def factorial(n):, def quicksort(arr):, def gcd(a, b): ] # 批量 token 化 inputs tokenizer(prompts, return_tensorspt, paddingTrue).to(next(model.parameters()).device) # 批量生成 outputs model.generate(**inputs, max_new_tokens50) # 输出每条结果 for i, output in enumerate(outputs): text tokenizer.decode(output, skip_special_tokensTrue) print(f\nPrompt {i1} 生成结果:\n{text})运行结果控制生成风格和长度还可以通过调整生成参数优化结果例如outputs model.generate( **inputs, max_new_tokens100, # 最大生成长度 temperature0.7, # 控制生成随机性 top_p0.9, # nucleus sampling do_sampleTrue ) for i, output in enumerate(outputs): text tokenizer.decode(output, skip_special_tokensTrue) print(f\nPrompt {i1} 生成结果 (控制风格):\n{text})运行结果多轮推理在实际开发中模型经常用于 多轮交互例如根据不断变化的需求生成或优化代码。接下来我们写一个代码案例展示如何实现多轮对话式推理# 初始对话生成一个 Python 函数计算平方根 conversation [# 请写一个 Python 函数计算平方根] for i in range(2): # 将对话内容 token 化并移动到 NPU inputs tokenizer(conversation, return_tensorspt, paddingTrue).to(next(model.parameters()).device) # 执行生成 outputs model.generate(**inputs, max_new_tokens50) # 解码生成结果 reply tokenizer.decode(outputs[0], skip_special_tokensTrue) print(f\n第 {i1} 轮生成:\n{reply}) # 将模型输出追加到对话中用于下一轮生成 conversation.append(reply)运行结果6.性能测试在完成模型加载和部署后我们对 CodeLlama 的推理性能进行了评估。测试中使用了一个包含多个 Python 函数的 prompt 列表通过批量输入测量模型生成结果的延迟和吞吐量。每次生成的最大 token 数设置为 50模拟常见的代码生成场景。示例代码import time from transformers import AutoTokenizer, AutoModelForCausalLM model_name code-llama-7b-instruct tokenizer AutoTokenizer.from_pretrained(model_name) model AutoModelForCausalLM.from_pretrained( model_name, device_mapauto, torch_dtypetorch.float16 ) prompts [ def fibonacci(n):, def factorial(n):, def quicksort(arr):, def gcd(a, b):, def is_prime(n): ] # 批量 token 化并移动到 NPU inputs tokenizer(prompts, return_tensorspt, paddingTrue).to(next(model.parameters()).device) num_trials 5 total_time 0.0 for i in range(num_trials): start_time time.time() outputs model.generate(**inputs, max_new_tokens50) end_time time.time() elapsed end_time - start_time total_time elapsed print(fTrial {i1}: {elapsed:.3f} s) avg_time total_time / num_trials num_tokens sum(len(tokenizer.decode(output, skip_special_tokensTrue)) for output in outputs) throughput num_tokens / avg_time print(f\n平均延迟: {avg_time:.3f} s) print(f吞吐量: {throughput:.1f} 字符/s)在执行过程中每次生成的延迟都被记录下来并计算了多次试验的平均延迟。通过解码生成结果可以统计生成字符数量从而得到吞吐量。执行结果从实际测试结果来看CodeLlama 在昇腾 NPU 上的单次生成延迟稳定在几十毫秒级别平均延迟仅 0.110 秒同时还能达到 4727.2 字符 / 秒的较高吞吐量足以支撑多 prompt 并行处理的场景需求。7.总结在本篇文章中我们主要使用了 GitCode Notebook 作为开发环境。对于希望快速体验和操作昇腾 NPU 的开发者来说Notebook 提供了即开即用的环境无需依赖本地硬件或复杂配置。在 GitCode Notebook 的昇腾环境中部署 CodeLlama 并不复杂同时也有一些需要注意的环节。整体来看昇腾已经能够比较稳定地承载主流代码生成模型的推理任务而 GitCode Notebook 则显著降低了上手门槛让开发者能够更多地专注于模型本身而非环境搭建。

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

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

立即咨询