74、在昇騰服務器 800I A2上遷移伏羲1.0/2.0大模型,并對比cpu和npu的精度

基本思想:在昇騰服務器上遷移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…