从 0 到 1:Llama 3-8B 在昇腾 Atlas 800T 上的推理调优与算力榨干指南
本文介绍了在GitCode云端Notebook环境中部署Meta-Llama-3-8B-Instruct大模型的完整流程。教程从环境准备开始,详细说明了如何利用ModelScope实现模型高速下载,并提供了适配Ascend NPU的推理代码编写方法。文章包含环境检查、模型下载、性能测试和NPU负载监控等关键步骤,同时针对常见问题给出了解决方案。通过图文并茂的方式,作者展示了从零开始部署大模型的全过
前言:前段时间在 GitCode 中注意到 Notebook 功能可以直接进行大模型开发,于是抱着试试看效果的心态,决定尝试在云端环境部署一次 Meta-Llama-3-8B-Instruct 模型。整个过程比预期顺利得多,但也遇到了一些容易踩坑的问题,因此整理成了本文,希望作为一份从零开始就能照着做的完整部署教程。
本文会带你完成以下工作:
● 环境检查
● 使用 ModelScope 高速下载模型
● 适配 Ascend NPU 的推理代码编写
● 模型推理与性能监控
● 常见错误说明与解决方法
● 整体部署经验总结
如果你以前没有在 NPU 环境部署大模型,也没使用过 GitCode Notebook,不用担心,这篇文章就是面向 第一次接触的开发者 所写,全程按步骤执行即可成功复现。
1. 环境准备
Llama 3 发布后成为最活跃的开源模型之一,其推理性能也足够支持 Notebook 环境中的各类实验。本次部署使用的是 GitCode 提供的云端 Notebook 服务,特点是开箱即可使用,适合零基础用户快速上机测试大模型。
● 运行平台:GitCode 云端 Notebook
● 算力规格:NPU Basic(NPU 卡,32vCPU,64GB 内存)
● 基础镜像:Ubuntu 22.04 + Python 3.11 + CANN 8.2(建议使用 CANN 8.0 及以上版本,以获得更完善的算子支持和性能表现)

完成以上步骤后我们就已经进入NoteBook里面了,先别急着操作,我们打开终端输入指令来看看,进入 Notebook 之后,可以先在 Terminal 中执行:

npu-smi info

可以看到环境已经准备就绪,可以开始后面的重头戏了!!!
2. 依赖安装与模型下载
2.1 依赖的安装
针对 HuggingFace 下载链路不稳定、速度慢的问题,我们选用 ModelScope(魔搭社区)提供的 Python SDK 完成模型文件的高速下载,保障了部署流程的高效推进。这个安装过程非常快,大家输入之后就能马上安装成功
pip install transformers accelerate modelscope
2.2 模型的下载
依赖安装完成后我们就可以着手下载模型了,关于模型的下载,我们只需要打开Untitled.ipynb在里面输入代码执行即可

模型下载代码:
from modelscope import snapshot_download
# 指定下载目录为当前文件夹下的 models 目录
print("正在从 ModelScope 下载 Meta-Llama-3-8B-Instruct...")
model_dir = snapshot_download('LLM-Research/Meta-Llama-3-8B-Instruct', cache_dir='./models')
print(f"模型已下载至: {model_dir}")

耐心等待几分钟,当 Notebook 输出模型路径,即代表下载已经完成。在等待几分钟后弹出以下提示代表模型已经安装完成 
3. 性能测试与NPU负载查看
3.1 性能测试
为了确认模型是否能够正常推理,可以首先运行一个简单的推理代码进行测试。推理成功后再观察 NPU 的资源利用情况。我最开始先用了一个简单的测试用例看看能不能正常运行,结果是好的,他能推理测试成功

3.2 ****NPU负载查看
同时,我们打开最初看到的那个表格发现他的表现非常的惊艳!性能非常完美,输入以下指令可查看到具体负载情况
watch -n 1 npu-smi info

在 Notebook 环境下,某些指标可能受容器透传影响,例如:
● Memory-Usage(显存占用)可能会显示异常或为 0
这并非模型未加载,而是容器读取机制的限制。
真正具有参考价值的是:
● HBM-Usage(高带宽内存实时占用)
● AICore 利用率(推理计算核心是否满载)
如果推理过程中 AICore 利用率明显提升,则说明模型推理已成功执行。
为验证昇腾 Atlas 800T 的计算核心被充分且完全调用,需重点关注 NPU 核心负载指标:在云端容器环境下,Memory-Usage 指标可能因透传机制问题显示为 0(无参考价值),此时应优先以 HBM-Usage(高带宽内存占用)和 AICore 利用率作为算力满载的核心判断依据。
4. 核心代码实战
下面给出一个可以直接用于多轮聊天的推理示例,并加入了 NPU 使用时必须设置的线程限制,避免 OpenBLAS 报错。
import os
import torch
import torch_npu # 激活 NPU 后端
from transformers import AutoTokenizer, AutoModelForCausalLM
import time
# ========== 线程限制 + NPU 环境优化(必加,避免线程报错) ==========
os.environ["OPENBLAS_DISABLE"] = "1"
os.environ["OPENBLAS_NUM_THREADS"] = "1"
os.environ["OMP_NUM_THREADS"] = "1"
# --- 基础配置 ---
MODEL_PATH = "./models/LLM-Research/Meta-Llama-3-8B-Instruct"
DEVICE = "npu:0"
def simple_chat():
print(f"[*] 加载模型到 {DEVICE} 中...\n")
# 1. 加载Tokenizer(极简配置,修复基础警告)
tokenizer = AutoTokenizer.from_pretrained(MODEL_PATH, trust_remote_code=True)
if tokenizer.pad_token_id is None:
tokenizer.pad_token_id = tokenizer.eos_token_id
# 2. 加载模型(NPU适配)
model = AutoModelForCausalLM.from_pretrained(
MODEL_PATH,
torch_dtype=torch.float16,
device_map=DEVICE,
trust_remote_code=True
)
model.config.pad_token_id = tokenizer.pad_token_id
# 3. 多轮对话逻辑(简单交互)
print("===== Llama 3 简单对话测试(输入 '退出' 结束)=====\n")
# 初始化对话历史
chat_history = []
while True:
# 输入用户问题
user_input = input("你:")
if user_input.strip() == "退出":
print("Llama 3:再见啦!")
break
# 构建对话模板
chat_history.append({"role": "user", "content": user_input})
# 生成输入(极简版,避免维度错误)
input_text = tokenizer.apply_chat_template(
chat_history,
add_generation_prompt=True,
tokenize=False # 先不编码,避免tensor维度问题
)
# 编码为模型可识别的格式
inputs = tokenizer([input_text], return_tensors="pt").to(DEVICE)
# 模型生成回复
start_time = time.time()
outputs = model.generate(
**inputs,
max_new_tokens=200, # 短回复,速度快
temperature=0.8, # 回复更自然
pad_token_id=tokenizer.pad_token_id,
eos_token_id=tokenizer.eos_token_id
)
end_time = time.time()
# 解码并打印回复
response = tokenizer.decode(outputs[0][len(inputs["input_ids"][0]):], skip_special_tokens=True)
print(f"Llama 3:{response} (耗时:{end_time - start_time:.2f}秒)\n")
# 更新对话历史
chat_history.append({"role": "assistant", "content": response})
# 释放NPU显存
torch.npu.empty_cache()
if __name__ == "__main__":
simple_chat()

最终,模型成功完成多轮自然对话交互,回复内容准确、逻辑清晰、无乱码,涵盖日常寒暄、昇腾 NPU 概念解答等场景。整个推理过程流畅无卡顿,验证了 Llama 3-8B + Atlas 800T 组合在对话类场景下的可用性。
说明:本测试在耗时指标的测算环节,暂未启用任何加速引擎进行优化,因此当前呈现的性能数据并非该硬件平台与模型组合下的最优表现,后续可通过集成加速引擎进一步挖掘系统算力潜力。
5. 常见问题与解决方法
问题 1:模型下载异常、速度慢或中断
原因:HuggingFace 下载链路不稳定,无法高效获取模型文件,需切换至 ModelScope(魔搭社区)Python SDK 完成模型高速下载,规避网络卡顿,中断风险。
解决方法:我最开始部署的时候就没管这么多,结果刚开始就遇到了问题困扰了很久,最后切换到魔搭社区
问题 2:****底层库线程资源冲突问题
$ python test.py
OpenBLAS blas_thread_init: pthread_create failed for thread 50 of 64: Resource temporarily unavailable
OpenBLAS blas_thread_init: RLIMIT_NPROC 1048576 current, 1048576 max
OpenBLAS blas_thread_init: pthread_create failed for thread 51 of 64: Resource temporarily unavailable
OpenBLAS blas_thread_init: RLIMIT_NPROC 1048576 current, 1048576 max
OpenBLAS blas_thread_init: pthread_create failed for thread 52 of 64: Resource temporarily unavailable
OpenBLAS blas_thread_init: RLIMIT_NPROC 1048576 current, 1048576 max
OpenBLAS blas_thread_init: pthread_create failed for thread 53 of 64: Resource temporarily unavailable
OpenBLAS blas_thread_init: RLIMIT_NPROC 1048576 current, 1048576 max
OpenBLAS blas_thread_init: pthread_create failed for thread 54 of 64: Resource temporarily unavailable
OpenBLAS blas_thread_init: RLIMIT_NPROC 1048576 current, 1048576 max
OpenBLAS blas_thread_init: pthread_create failed for thread 55 of 64: Resource temporarily unavailable
OpenBLAS blas_thread_init: RLIMIT_NPROC 1048576 current, 1048576 max
OpenBLAS blas_thread_init: pthread_create failed for thread 56 of 64: Resource temporarily unavailable
OpenBLAS blas_thread_init: RLIMIT_NPROC 1048576 current, 1048576 max
OpenBLAS blas_thread_init: pthread_create failed for thread 57 of 64: Resource temporarily unavailable
OpenBLAS blas_thread_init: RLIMIT_NPROC 1048576 current, 1048576 max
OpenBLAS blas_thread_init: pthread_create failed for thread 58 of 64: Resource temporarily unavailable
OpenBLAS blas_thread_init: RLIMIT_NPROC 1048576 current, 1048576 max
OpenBLAS blas_thread_init: pthread_create failed for thread 59 of 64: Resource temporarily unavailable
OpenBLAS blas_thread_init: RLIMIT_NPROC 1048576 current, 1048576 max
OpenBLAS blas_thread_init: pthread_create failed for thread 60 of 64: Resource temporarily unavailable
OpenBLAS blas_thread_init: RLIMIT_NPROC 1048576 current, 1048576 max
OpenBLAS blas_thread_init: pthread_create failed for thread 61 of 64: Resource temporarily unavailable
OpenBLAS blas_thread_init: RLIMIT_NPROC 1048576 current, 1048576 max
OpenBLAS blas_thread_init: pthread_create failed for thread 62 of 64: Resource temporarily unavailable
OpenBLAS blas_thread_init: RLIMIT_NPROC 1048576 current, 1048576 max
OpenBLAS blas_thread_init: pthread_create failed for thread 63 of 64: Resource temporarily unavailable
OpenBLAS blas_thread_init: RLIMIT_NPROC 1048576 current, 1048576 max
Segmentation fault
原因:OpenBLAS 尝试创建 64 个线程时触发「Resource temporarily unavailable」错误,最终导致 Segmentation fault 段错误;根因是云端容器环境下 RLIMIT_NPROC 显示上限与实际可用线程数不匹配,且 OpenBLAS 线程初始化早于代码内环境变量限制,常规的代码内线程配置无法生效。
解决方法:这个问题应该是我最初部署的时候,没注意那么多,同时启动了多个资源,导致最后在测试的时候无法成功的创建那么多线程测试,最后重新安装部署之后就没问题了
6. 实战部署总结
6.1 实战感想
这次部署 Llama 3-8B,不只是把模型跑起来这么简单,更像是完整体验了一次“从零开始上手大模型”。整个过程让我对现在的算力生态有了更真实的感受。下面是我几个比较深的体会,也分享给第一次尝试的朋友。
性能够快、够稳,实际表现比预期好****:推理跑起来后,我一直盯着监控看。AICore 利用率直接冲到 100%,没有掉速,也没有卡顿。这说明算力是真的跑满了,不是摆样子的那种。
尤其在 FP16 精度下:
● 显存更省
● 速度更快
● 整体表现特别稳定
如果你是用来做内部问答、知识库、本地推理服务,这样的性能已经很够用了,完全不是以前那种凑合的那种级别。
最值得我称赞的一点就是好用,报错少,以前在一些平台上跑开源模型,动不动就要改一堆代码:算子不支持、接口不对、运行报错……真的很容易把人搞崩溃。但这次体验最大的感觉比以前强了不知道多少
整个迁移几乎就是:
● 装个 torch_npu
● 把设备名改成 “npu”
● 然后就能直接跑了
不用大改代码,不用折腾半天。
简单来说就是:“原本能跑 GPU,现在也能直接跑 NPU”。
对小白来说,这个体验太友好了。
6.2 部署方案总结
经过完整验证,Llama 3-8B 在 Atlas 800T Notebook 环境中可以顺利完成端到端部署。整体体验足够流畅,且不需要复杂的适配性修改。
1. 环境选型:优先选用 CANN 8.0 及以上版本,可获得更完善的算子支持和更优的推理性能;
2. 代码适配:仅需导入 torch_npu 并将设备指定为 npu:0,即可实现 PyTorch 代码向昇腾 NPU 的平滑迁移,无需大规模重构;
3. 监控核心:云端容器环境下,AICore 利用率相比显存指标(Memory-Usage)更能反映 NPU 真实负载状态(显存指标易因透传问题显示异常)。
进阶资源指引:若需尝试更大参数规模的模型(如 718B MoE 架构的 openPangu),或申请更多昇腾算力资源,可通过 AtomGit 社区获取官方支持:
● 算力资源申请链接:https://ai.gitcode.com/ascend-tribe/openPangu-Ultra-MoE-718B-V1.1?source_module=search_result_model
声明:本文基于开源社区模型 Llama 3-8B,采用 PyTorch 原生适配方式完成部署与推理测试。本测试未启用加速引擎,当前性能非最优表现。测试结果仅用于验证功能可用性及 NPU 算力调用效果,不代表该硬件平台或模型的最终性能上限。
更多推荐

所有评论(0)