基本思想:在昇腾服务器上迁移github公开链接的的伏羲1.0/2.0大模型,但是由于伏羲2.0模型没有权重,这里使用自己造的的权重进行推理模型测试,在之前迁移过这个网站问海大模型和问天大模型人工智能天气预报模型示范计划AIM-FDP支撑平台之后, 开始动手迁移伏羲大模型

一、首先需要一台昇腾800 I A2服务器,支持固件、驱动已经安装,环境如下

源码链接:GitHub - tpys/FuXi: A cascade machine learning forecasting system for 15-day global weather forecast

二、首先做一个镜像,比较简单,简单记录一下,使用者可以直接进行第三步进行操作

root@2024-12-29-2025-9-28:~# vim /etc/docker/daemon.json
填入内容
{ "insecure-registries": ["https://swr.cn-east-317.qdrgznjszx.com"], "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"] }
保存退出、然后重启docker即可
root@2024-12-29-2025-9-28:~# systemctl restart docker.serviceroot@2024-12-29-2025-9-28:~# docker pull swr.cn-east-317.qdrgznjszx.com/sxj731533730/ubuntu:20.04
20.04: Pulling from sxj731533730/ubuntu
edab87ea811e: Pull complete
Digest: sha256:b2d9e5ff9781680bab26f7d366a6f5ab803df91ef0737343ab2998335a00abe1
Status: Downloaded newer image for swr.cn-east-317.qdrgznjszx.com/sxj731533730/ubuntu:20.04
swr.cn-east-317.qdrgznjszx.com/sxj731533730/ubuntu:20.04

创建容器进入

 #!/bin/bash
docker_images=swr.cn-east-317.qdrgznjszx.com/sxj731533730/ubuntu:20.04
model_dir=/home/HwHiAiUser #根据实际情况修改挂载目录
docker run -it -d  -p 1800:22 --name pycharm --ipc=host   \--device=/dev/davinci1 \--device=/dev/davinci2 \--device=/dev/davinci3 \--device=/dev/davinci4 \--device=/dev/davinci5 \--device=/dev/davinci6 \--device=/dev/davinci7 \--device=/dev/davinci8 \--device=/dev/davinci_manager \--device=/dev/devmm_svm \--device=/dev/hisi_hdc \-v /usr/local/dcmi:/usr/local/dcmi \-v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi \-v /usr/local/Ascend/driver/lib64/common:/usr/local/Ascend/driver/lib64/common \-v /usr/local/Ascend/driver/lib64/driver:/usr/local/Ascend/driver/lib64/driver \-v /etc/ascend_install.info:/etc/ascend_install.info \-v /etc/vnpu.cfg:/etc/vnpu.cfg \-v /usr/local/Ascend/driver/version.info:/usr/local/Ascend/driver/version.info \-v ${model_dir}:${model_dir} \-v  /var/log/npu:/usr/slog ${docker_images} \/bin/bash

创建容器进入配置伏羲大模型的环境,以打包使用者使用

hko_test@node3:~$ sudo vim ppp.sh
[sudo] password for hko_test:
填入上面内容
hko_test@node3:~$ bash ppp.sh
20f9abbd434fbde9403c2951b94322e7598a6185ea086ad4d4217e21a0d92c3b
hko_test@node3:~$ docker ps -a
CONTAINER ID   IMAGE                                                      COMMAND       CREATED         STATUS         PORTS                                     NAMES
20f9abbd434f   swr.cn-east-317.qdrgznjszx.com/sxj731533730/ubuntu:20.04   "/bin/bash"   3 seconds ago   Up 2 seconds   0.0.0.0:1800->22/tcp, [::]:1800->22/tcp   pycharm
hko_test@node3:~$ docker ps -a
CONTAINER ID   IMAGE                                                      COMMAND       CREATED         STATUS         PORTS                                     NAMES
20f9abbd434f   swr.cn-east-317.qdrgznjszx.com/sxj731533730/ubuntu:20.04   "/bin/bash"   9 seconds ago   Up 8 seconds   0.0.0.0:1800->22/tcp, [::]:1800->22/tcp   pycharm
hko_test@node3:~$ docker start 20f
20f
hko_test@node3:~$ docker exec -it 20f /bin/bash

进入容器环境进行配置一个独立的docker环境,方便使用者隔离物理机可以在所有同型号的宿主机直接开箱即用

root@node3:/# apt-get update
root@node3:/#apt-get install cmake gcc g++ cmake make vim git python3-pip python3-dev libopencv-dev ffmpeg ssh openssh-server openssh-client tree
root@node3:/#  pip3 install numpy torch==2.4.0 torch_npu torchvision==0.19.0 scikit-learn   onnx onnxruntime mnn ncnn pyaml decorator attrs psutil matplotlib argparse xarraynetcdf4 -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple

然后修改容器内部的端口号和访问权限,以方便远程调用docker镜像内部的环境,确保服务器开了1800端口

root@node3:/# vim /etc/ssh/sshd_config
root@node3:/#
Port 22
PermitRootLogin yes
PasswordAuthentication yesroot@20f9abbd434f:/# service ssh start* Starting OpenBSD Secure Shell server sshd                                                                                                                               [ OK ]
root@20f9abbd434f:/# /etc/init.d/ssh restart* Restarting OpenBSD Secure Shell server sshd

设置容器的账号 root 密码我设置了和宿主机密码相同

root@node3:/# passwd root
New password:
Retype new password:
passwd: password updated successfully

下载推理包 ,支持pyhon去推理om模型

tools: Ascend tools - Gitee.com 将下面两个文件拷贝到/home/HwHiAiUser/sxj731533730/ 下

aclruntime-0.0.2-cp38-cp38-linux_aarch64.whl

ais_bench-0.0.2-py3-none-any.whl

root@20f9abbd434f:/# pip3 install /home/HwHiAiUser/sxj731533730/*.whl
Processing /home/HwHiAiUser/sxj731533730/aclruntime-0.0.2-cp38-cp38-linux_aarch64.whl
Processing /home/HwHiAiUser/sxj731533730/ais_bench-0.0.2-py3-none-any.whl
Processing /home/HwHiAiUser/sxj731533730/eccodes_python-0.9.9-py2.py3-none-any.whl
Requirement already satisfied: tqdm in /usr/local/lib/python3.8/dist-packages (from ais-bench==0.0.2) (4.67.1)
Requirement already satisfied: attrs>=21.3.0 in /usr/local/lib/python3.8/dist-packages (from ais-bench==0.0.2) (25.3.0)
Requirement already satisfied: numpy in /usr/local/lib/python3.8/dist-packages (from ais-bench==0.0.2) (1.24.4)
Collecting cffiDownloading cffi-1.17.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (448 kB)|████████████████████████████████| 448 kB 367 kB/s
Collecting pycparserDownloading pycparser-2.22-py3-none-any.whl (117 kB)|████████████████████████████████| 117 kB 7.5 MB/s
Installing collected packages: aclruntime, ais-bench, pycparser, cffi, eccodes-python
Successfully installed aclruntime-0.0.2 ais-bench-0.0.2 cffi-1.17.1 eccodes-python-0.9.9 pycparser-2.2

下载cann包,完成模型转换的工具安装

进行安装

root@20f9abbd434f:/# ./home/HwHiAiUser/Ascend-cann-toolkit_8.0.0_linux-aarch64.run --full --force
root@20f9abbd434f:/# vim ~/.bashrcsource /usr/local/Ascend/ascend-toolkit/set_env.sh
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/Ascend/driver/lib64/driver/
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/Ascend/driver/lib64/common/
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/Ascend/ascend-toolkit/8.3.RC1/atc/lib64/
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/Ascend/ascend-toolkit/8.3.RC1/runtime/lib64/stub/linux/aarch64/root@20f9abbd434f:/#  find / -name libascend_hal.so
/usr/local/Ascend/ascend-toolkit/8.0.0/runtime/lib64/stub/linux/aarch64/libascend_hal.so
/usr/local/Ascend/ascend-toolkit/8.0.0/runtime/lib64/stub/linux/x86_64/libascend_hal.so
/usr/local/Ascend/ascend-toolkit/8.0.0/runtime/lib64/stub/libascend_hal.so
/usr/local/Ascend/ascend-toolkit/8.0.0/aarch64-linux/devlib/linux/aarch64/libascend_hal.so
/usr/local/Ascend/ascend-toolkit/8.0.0/aarch64-linux/devlib/linux/x86_64/libascend_hal.so
/usr/local/Ascend/ascend-toolkit/8.0.0/aarch64-linux/devlib/libascend_hal.so
/usr/local/Ascend/ascend-toolkit/latest/aarch64-linux/devlib/linux/aarch64/libascend_hal.so
/usr/local/Ascend/ascend-toolkit/latest/aarch64-linux/devlib/linux/x86_64/libascend_hal.so
/usr/local/Ascend/ascend-toolkit/latest/aarch64-linux/devlib/libascend_hal.so
/usr/local/Ascend/driver/lib64/driver/libascend_hal.so
root@20f9abbd434f:/# cp /usr/local/Ascend/ascend-toolkit/latest/aarch64-linux/devlib/libascend_hal.so /usr/lib

在容器内部可以看到显卡信息

到此环境变量配置完成,镜像的容器可以使用,可以提交一版本


hko_test@node3:~$ docker ps -a
CONTAINER ID   IMAGE                                                      COMMAND       CREATED             STATUS             PORTS                                     NAMES
20f9abbd434f   swr.cn-east-317.qdrgznjszx.com/sxj731533730/ubuntu:20.04   "/bin/bash"   About an hour ago   Up About an hour   0.0.0.0:1800->22/tcp, [::]:1800->22/tcp   pycharm
hko_test@node3:~$ docker commit 20f9abbd434f ubuntu20.04:v1
sha256:df89b8ddb0cbfdfe1bbcda356317b909a09b4f6c9b1e2898bbe08ddb2fd7182b

三、使用者直接从第三步使用即可, 进入容器,进行转模型进行测试

hko_test@node3:~$ docker ps -a
CONTAINER ID   IMAGE                                                      COMMAND       CREATED             STATUS             PORTS                                     NAMES
20f9abbd434f   swr.cn-east-317.qdrgznjszx.com/sxj731533730/ubuntu:20.04   "/bin/bash"   About an hour ago   Up About an hour   0.0.0.0:1800->22/tcp, [::]:1800->22/tcp   pycharm
hko_test@node3:~$ docker start 20f9abbd434f
20f9abbd434f
hko_test@node3:~$ docker exec -it 20f9abbd434f /bin/bash

转一下模型

root@20f9abbd434f:/home/HwHiAiUser/sxj731533730/FuXi-suite/FuXi_EC# atc --model=short.onnx --framework=5 --output=short --input_format=ND --input_shape="input:1,2,70,721,1440;temb:1,12" --log=error --soc_version=Ascend910B3
ATC start working now, please wait for a moment.
.Warning: tiling offset out of range, index: 32
..Warning: tiling offset out of range, index: 32
.Warning: tiling offset out of range, index: 32
......
ATC run success, welcome to the next use.root@20f9abbd434f:/home/HwHiAiUser/sxj731533730/FuXi-suite/FuXi_EC# atc --model=short.onnx --framework=5 --output=short --input_format=ND --input_shape="input:1,2,70,721,1440;temb:1,12" --log=error --soc_version=Ascend910B3
ATC start working now, please wait for a moment.root@20f9abbd434f:/home/HwHiAiUser/sxj731533730/FuXi-suite/FuXi_EC# atc --model=medium.onnx --framework=5 --output=medium --input_format=ND --input_shape="input:1,2,70,721,1440;temb:1,12" --log=error --soc_version=Ascend910B3
ATC start working now, please wait for a moment.
.............
ATC run success, welcome to the next use.

测试cpu服务器结果

测试昇腾npu服务器结果

root@20f9abbd434f:/home/HwHiAiUser/sxj731533730/fuxi1_om# cat fuxi.py 
import argparse
import os
import time 
import numpy as np
import xarray as xr
import pandas as pd
from ais_bench.infer.interface import InferSessionfrom util import save_likeparser = argparse.ArgumentParser()
parser.add_argument('--model', type=str, default="/home/HwHiAiUser/sxj731533730/FuXi-suite/FuXi_EC",required=False, help="FuXi onnx model dir")
parser.add_argument('--input', type=str, default="/home/HwHiAiUser/sxj731533730/FuXi-suite/Sample_Data/nc/20231012-06_input_netcdf.nc",required=False, help="The input data file, store in netcdf format")
parser.add_argument('--save_dir', type=str, default="")
parser.add_argument('--num_steps', type=int, nargs="+", default=[20])
args = parser.parse_args()def time_encoding(init_time, total_step, freq=6):init_time = np.array([init_time])tembs = []for i in range(total_step):hours = np.array([pd.Timedelta(hours=t*freq) for t in [i-1, i, i+1]])times = init_time[:, None] + hours[None]times = [pd.Period(t, 'H') for t in times.reshape(-1)]times = [(p.day_of_year/366, p.hour/24) for p in times]temb = np.array(times, dtype=np.float32)temb = np.concatenate([np.sin(temb), np.cos(temb)], axis=-1)temb = temb.reshape(1, -1)tembs.append(temb)return np.stack(tembs)def load_model(model_name):session = InferSession(0,model_name)return sessiondef run_inference(model_dir, data, num_steps, save_dir=""):total_step = sum(num_steps)init_time = pd.to_datetime(data.time.values[-1])tembs = time_encoding(init_time, total_step)print(f'init_time: {init_time.strftime(("%Y%m%d-%H"))}')print(f'latitude: {data.lat.values[0]} ~ {data.lat.values[-1]}')assert data.lat.values[0] == 90assert data.lat.values[-1] == -90input = data.values[None]print(f'input: {input.shape}, {input.min():.2f} ~ {input.max():.2f}')print(f'tembs: {tembs.shape}, {tembs.mean():.4f}')stages = ['short', 'medium', 'long']step = 0for i, num_step in enumerate(num_steps):stage = stages[i]start = time.perf_counter()model_name = os.path.join(model_dir, f"{stage}.om")print(f'Load model from {model_name} ...')        session = load_model(model_name)load_time = time.perf_counter() - startprint(f'Load model take {load_time:.2f} sec')print(f'Inference {stage} ...')start = time.perf_counter()for _ in range(0, num_step):temb = tembs[step]#new_input, = session.run(None, {'input': input, 'temb': temb})new_input=  session.infer([input,temb])[0]#print(new_input)output = new_input[:, -1] save_like(output, data, step, save_dir)print(f'stage: {i}, step: {step+1:02d}, output: {output.min():.2f} {output.max():.2f}')input = new_inputstep += 1run_time = time.perf_counter() - startprint(f'Inference {stage} take {run_time:.2f}')if step > total_step:breakif __name__ == "__main__":data = xr.open_dataarray(args.input)run_inference(args.model, data, args.num_steps, args.save_dir)

dd

root@20f9abbd434f:/home/HwHiAiUser/sxj731533730/fuxi1_om# python3 fuxi.py 
init_time: 20231012-06
latitude: 90.0 ~ -90.0
input: (1, 2, 70, 721, 1440), -5345.88 ~ 205068.69
tembs: (20, 1, 12), 0.6652
Load model from /home/HwHiAiUser/sxj731533730/FuXi-suite/FuXi_EC/short.om ...
[INFO] acl init success
[INFO] open device 0 success
[INFO] create new context
[INFO] load model /home/HwHiAiUser/sxj731533730/FuXi-suite/FuXi_EC/short.om success
[INFO] create model description success
Load model take 13.06 sec
Inference short ...
stage: 0, step: 01, output: -5168.00 65504.00
stage: 0, step: 02, output: -5064.00 65504.00
stage: 0, step: 03, output: -4944.00 65504.00
stage: 0, step: 04, output: -4736.00 65504.00
stage: 0, step: 05, output: -4568.00 65504.00
stage: 0, step: 06, output: -4248.00 65504.00
stage: 0, step: 07, output: -3862.00 65504.00
stage: 0, step: 08, output: -3296.00 65504.00
stage: 0, step: 09, output: -2812.00 65504.00
stage: 0, step: 10, output: -2316.00 65504.00
stage: 0, step: 11, output: -1898.00 65504.00
stage: 0, step: 12, output: -2706.00 65504.00
stage: 0, step: 13, output: -3418.00 65504.00
stage: 0, step: 14, output: -3546.00 65504.00
stage: 0, step: 15, output: -3458.00 65504.00
stage: 0, step: 16, output: -3172.00 65504.00
stage: 0, step: 17, output: -2686.00 65504.00
stage: 0, step: 18, output: -2136.00 65504.00
stage: 0, step: 19, output: -2434.00 65504.00
stage: 0, step: 20, output: -2968.00 65504.00
Inference short take 18.40
[INFO] unload model success, model Id is 1
[INFO] end to reset device 0
[INFO] end to finalize acl

使用显存的大小

ddd

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/95551.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/95551.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/95551.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何高效比对不同合同版本差异,避免法律风险?

智能文档比对系统通过自动化、高精度的差异比对与结构化报告,锁定合同修改、防止核心条款误删并实现版本清晰追溯,解决证券基金公司在合同范本管理中的操作风险、审核效率与归档难题。 如何防止业务人员误改或误删合同条款? 这是一个典型的操…

快手Keye-VL 1.5开源128K上下文+0.1秒级视频定位+跨模态推理,引领视频理解新标杆

人工智能和多模态学习领域,视频理解技术的突破为各类应用提供了强大的支持。快手近期开源了其创新性的大型多模态推理模型——Keye-VL 1.5,该模型具备超长的上下文窗口、0.1秒级的视频时序定位能力,并支持视频与文本之间的跨模态推理。这一技…

【前端教程】JavaScript 实现图片鼠标悬停切换效果与==和=的区别

图片鼠标悬停切换效果 功能说明 页面展示4张默认图片,当鼠标移动到任意一张图片上时,该图片会切换为对应的特定图片(诗、书、画、唱);当鼠标移出时,图片恢复为默认图片。 和的区别 在讲解案例前&#xff0c…

ss 原理

SSR(服务端渲染)技术文档 一、SSR 概述 SSR(Server-Side Rendering,服务端渲染)是一种在服务端生成完整 HTML 页面,再发送给客户端渲染的前端渲染模式。与 CSR(客户端渲染,如 React/…

chrome 浏览器开发者工具技巧

$0 我们在开发者工具里面选中了哪个元素,他后面都会跟一个$0 ,则表示 $0 就是选择这个标签元素 如图:

GJOI 9.4 题解

1.CF1801B Buy Gifts / 洛谷 P13532 买礼物 题意 n≤2105n\le 2\times 10^5n≤2105。 思路 神秘卡常题,如果等待提交记录久一点就能知道自己 A 掉…… 题目问 A 的最大值,减去 B 的最大值,求差值最小值。但是怎么选到两个最大值呢&#x…

Git 工具的「安装」及「基础命令使用」

- 第 119 篇 - Date: 2025 - 09 - 05 Author: 郑龙浩(仟墨) Git 工具的「安装」及「基础命令使用」 学习课程:https://www.bilibili.com/video/BV1MU4y1Y7h5?spm_id_from333.788.player.switch&vd_source2683707f584c21c57616cc6ce8454e…

2025高教社数学建模国赛A题 - 烟幕干扰弹的投放策略(完整参考论文)

基于模拟遗传退火的烟幕弹投递方式的研究 摘要 烟幕干扰弹作为一种具有成本低、效费比高等优点的典型防御手段,主要通过化学燃烧或爆炸分散形成气溶胶云团,在目标前方特定空域形成有效遮蔽,从而干扰敌方导弹攻击路径。随着精确投放技术的发展,现可利用无人机实现烟幕干扰…

[源力觉醒 创作者计划]_文心一言 4.5开源深度解析:性能狂飙 + 中文专精

文章目录[源力觉醒 创作者计划]_文心一言 4.5开源深度解析:性能狂飙 中文专精一. 部署实战:单卡环境的极速落地1.1 🖥️ 环境配置の手把手教程 📝部署准备:硬件与镜像依赖安装:一行代码搞定1.2 🚀 模型启动…

开发微服务的9个最佳实践

微服务架构是一种演进的模式,从根本上改变了服务器端代码的开发和管理方式。这种架构模式涉及将应用程序设计和开发为松散耦合服务的集合,这些服务通过定义良好的轻量级 API 进行交互以满足业务需求。它旨在通过促进持续交付和开发来帮助软件开发公司加速…

Karmada v1.15 版本发布

Karmada 是开放的多云多集群容器编排引擎,旨在帮助用户在多云环境下部署和运维业务应用。凭借兼容 Kubernetes 原生 API 的能力,Karmada 可以平滑迁移单集群工作负载,并且仍可保持与 Kubernetes 周边生态工具链协同。 Karmada v1.15 版本现已…

[GYCTF2020]Ezsqli

文章目录测试过滤找注入点布尔盲注无列名盲注总结测试过滤 xor for distinct information handler binary floor having join pg_sleep bp测试出来禁用了这些。 找注入点 查询回显推断1Nu1Labool(false)1’bool(false)1’#bool(false)不是单引号包裹1"#bool(false)没有引…

Agno 多 Agent 协作框架 - 手把手从零开始教程

本教程将带你从零开始,一步步构建一个完整的多 Agent 协作系统。每一步都有详细的代码示例和解释,让你真正理解 Agno 框架的工作原理。第一步:创建你的第一个 Agent 让我们从最简单的开始 - 创建一个能回答问题的 Agent。 1.1 创建基础文件 首…

数据库查询优化

这篇文章适合刚刚入手项目的小伙伴,为大家如何提高数据库查询效率提供一些建议。1.添加索引1.1 索引是什么对于索引基础薄弱的同学,我们可以从 “索引是什么” 简单类比:索引就像书籍的目录,能帮数据库快速定位到需要的数据&#…

安徽大学概率论期末试卷及答案解析

本文还有配套的精品资源,点击获取 简介:安徽大学的概率论课程围绕随机现象的规律性,覆盖了多个核心概念,如随机事件的概率、条件概率、独立事件、概率分布、期望值、方差、大数定律和中心极限定理。本资源包含期末试卷及答案&a…

HarmonyOS应用开发之界面列表不刷新问题Bug排查记:从现象到解决完整记录

Bug排查在软件开发过程中扮演着至关重要的角色,本文采用日记形式记录了Bug排查的全过程,通过这种方式可以更加真实、详细地记录问题,便于后续追溯和经验沉淀。 Bug背景 在使用HarmonyOS的ArkUI框架开发一个卡片管理应用时,遇到了…

FastVLM-0.5B 模型解析

模型介绍 FastVLM(Fast Vision-Language Model)是苹果团队于2025年在CVPR会议上提出的高效视觉语言模型,专为移动设备(如iPhone、iPad、Mac)优化,核心创新在于通过全新设计的 FastViTHD混合视觉编码器 解决…

集成学习 | MATLAB基于CNN-LSTM-Adaboost多输入单输出回归预测

集成学习 | MATLAB基于CNN-LSTM-Adaboost多输入单输出回归预测 一、主要功能 该代码使用 CNN 提取特征,LSTM 捕捉时序依赖,并通过 AdaBoost 集成多个弱学习器(每个弱学习器是一个 CNN-LSTM 网络),最终组合成一个强预测器,用于回归预测任务。代码完成了从数据预处理、模型…

关于Homebrew:Mac快速安装Homebrew

关于macOS 安装HomebrewHomebrewHomebrew介绍Homebrew 官网地址Homebrew 能安装什么?Mac上安装Homebrew主要步骤:打开终端,执行官网安装脚本注意遇到问题①:脚本在克隆 Homebrew 核心仓库时,​​无法连接 GitHub​​&a…

【前端】使用Vercel部署前端项目,api转发到后端服务器

文章目录Vercel是什么概要Vercel部署分为两种方案:一、使用GitHub构建部署二、通过 Vercel CLI 上传本地构建资源注意事项转发API到后端小结Vercel是什么 Vercel是一款专为前端开发者打造的云部署平台,它支持一键部署静态网站、AI工具和现代Web应用。Ve…