昇腾910B国产化大模型适配指南

昇腾910B国产化大模型适配指南



第一章:昇腾910B适配PyTorch环境的虚拟环境安装

一、版本要求

PyTorch版本要求:2.1.0版本,能够原生适配NPU环境
PyTorch-NPU版本要求:2.1.0版本,能够与PyTorch版本兼容
Python版本要求:Python3.8.3版本
910B服务器OS要求:aarch64-linux
910B服务器CANN要求:7.0.RC1.2
服务器环境查询方式:

查看环境变量:printenv
cd /usr/local/Ascend/ascend-toolkit/latest 查看服务器环境,可以发现是aarch64-linux
cat toolkit/version.info 查看CANN版本,可以发现版本为7.0.RC1.2,支持pytorch2.1.0

二、虚拟环境安装

1. 在服务器上安装虚拟环境:

python -m venv npu_test(npu_test是虚拟环境的名字)

2. 安装NPU依赖的环境:
安装方式请参考:Ascend Extension for PyTorch
参考地址:https://gitee.com/ascend/pytorch
安装pytorch以及pytorch-npu:

pip3 install torch==2.1.0 -i https://mirrors.aliyun.com/pypi/simple/
pip3 install torch-npu==2.1.0 -i https://mirrors.aliyun.com/pypi/simple/

3.初始化CANN环境变量(服务器已经安装固件和驱动,以及CANN环境)

source /usr/local/Ascend/ascend-toolkit/set_env.sh

4.Python环境检查torch_npu是否可用,进入python3,输入以下代码:

import torch
import torch_npu

x = torch.randn(2, 2).npu()
y = torch.randn(2, 2)
以下是一个基于栈的出栈序列检查的C语言代码: ```c #include <stdio.h> #include <stdlib.h> #define MAX_STACK_SIZE 100 int stack[MAX_STACK_SIZE]; int top = -1; void push(int val) { if (top == MAX_STACK_SIZE - 1) { printf("Stack overflow\n"); exit(1); } stack[++top] = val; } int pop() { if (top == -1) { printf("Stack underflow\n"); exit(1); } return stack[top--]; } int main() { int n, i, j; int push_seq[MAX_STACK_SIZE], pop_seq[MAX_STACK_SIZE]; printf("Enter the size of the sequence: "); scanf("%d", &n); printf("Enter the push sequence: "); for (i = 0; i < n; i++) { scanf("%d", &push_seq[i]); } printf("Enter the pop sequence: "); for (i = 0; i < n; i++) { scanf("%d", &pop_seq[i]); } i = 0; j = 0; while (i < n && j < n) { if (push_seq[i] == pop_seq[j]) { i++; j++; } else if (top != -1 && stack[top] == pop_seq[j]) { pop(); j++; } else { push(push_seq[i++]); } } while (top != -1 && j < n) { if (stack[top] == pop_seq[j]) { pop(); j++; } else { break; } } if (top == -1 && j == n) { printf("The pop sequence is valid.\n"); } else { printf("The pop sequence is not valid.\n"); } return 0; } ``` 该程序要求用户输入一个序列的大小,一个压栈序列和一个出栈序列。然后,程序使用一个基于栈的算法来检查出栈序列的合法性。如果出栈序列是合法的,程序将输出“ The pop sequence is valid.”,否则输出“The pop sequence is not valid.”。 该算法的基本思想是模拟压栈和出栈过程。我们从压栈序列的开头开始遍历,遇到一个和出栈序列的当前元素相等的元素时,我们将它出栈。否则,我们将该元素压入栈中。如果栈顶元素和出栈序列的当前元素相等,则将栈顶元素出栈。 在遍历完压栈序列后,我们检查栈中剩余的元素是否可以与出栈序列中的元素匹配。如果可以,则弹出栈顶元素并移动到下一个出栈元素。如果不能匹配,则出栈序列无效。 此算法的时间复杂度为O(n),其中n为序列的大小。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值