【linux服務器】大語言模型實戰教程:LLMS大模型部署到個人服務器或嵌入式開發板(保姆級教學)


在這里插入圖片描述

🎬 鴿芷咕:個人主頁

?🔥 個人專欄: 《C++干貨基地》《粉絲福利》

??生活的理想,就是為了理想的生活!

引言

說到大語言模型相信大家都不會陌生,大型語言模型(LLMs)是人工智能文本處理的主要類型,也現在最流行的人工智能應用形態。ChatGPT就是是迄今為止最著名的使用LLM的工具,它由OpenAI的GPT模型的特別調整版本提供動力,而今天我們就來帶大家體驗一下部署大模型的實戰。

文章目錄

  • 引言
  • 一、項目選擇與系統介紹
    • 1.1 項目介紹
    • 1.2 Tiny-Llama語言模型
    • 1.3 進入系統
    • 1.4 進行遠程連接
  • 二、部署LLMS大模型
    • 2.1 拉取代碼到環境
    • 2.2 自定義算子部署
      • 配置protoc 環境
      • 算子編譯部署
      • 修改環境變量
      • 編譯運行& 依賴安裝
    • 2.3 推理啟動
  • 三、 項目體驗

一、項目選擇與系統介紹

1.1 項目介紹

本來博主是準備來部署一下咱們的,清華大語言模型鏡像這個目前也是非常的火啊,吸引了很多人的注意其優秀的性能和GPT3 不相上下,但是由于考慮到,大部分人電腦其實跑大模型是有一點點吃力的,為了讓更多人來先邁出部署模型的第一步,于是就決定去 gitee 上找一個小型一點的大模型來實戰一下。

1.2 Tiny-Llama語言模型

  • 果不其然剛搜索就發現 一個基于香橙派AI Pro 部署的語言大模型項目,這不正好嗎?直接開始

在這里插入圖片描述

  • 點進去一看發現這是南京大學開源的一套基于香橙派 AIpro部署的Tiny-Llama語言模型
  • (開源地址)

1.3 進入系統

這里我們選擇的是openEuler,是香橙派的這塊板子內置的系統。但其實他的內核是ubuntu這里可以給大家看一下,所以我們用 ubuntu 服務器來部署應該是沒有問題的。

在這里插入圖片描述

  • openEuler 是一由中國開源軟件基金會主導,以Linux穩定系統內核為基礎,華為深度參與,面向服務器、桌面和嵌入式等的一個開源操作系統。

1.4 進行遠程連接

  • 這里直接插電啟動,默認用戶名 HwHiAiUser、密碼 Mind@123 當然root密碼也是一樣的

  • 這里我們進來之后可以直接選擇鏈接WiFi 非常便捷

  • 當然這里大家在這里也可以選擇云服務器遠程實戰

在這里插入圖片描述

  • 然后我們打開命令窗查看IP , 由于系統默認支持ssh 遠程連接,所以博主這里就直接采用 Sxhell 進行連接
  • 輸入ip 選擇 HwHiAiUser 登錄 密碼 Mind@123

在這里插入圖片描述

二、部署LLMS大模型

2.1 拉取代碼到環境

  • 先cd進入 cd ~/samples 目錄
  • 之后直接利用git 拉取我們的項目,git 由于系統鏡像自帶的有就不用我們手動安裝了

在這里插入圖片描述

2.2 自定義算子部署

配置protoc 環境

  • 使用wget工具從指定的華為云鏈接下載 protobuf-all-3.13.0.tar.gz文件
wget  https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/wanzutao/tiny-llama/protobuf-all-3.13.0.tar.gz --no-check-certificate

在這里插入圖片描述

  • 解壓剛剛下載的文件
tar -zxvf protobuf-all-3.13.0.tar.gz

在這里插入圖片描述

這里解壓速度非常快,基本一秒就OK了

在這里插入圖片描述

  • 進入 protobuf-3.13.0 文件夾中
cd protobuf-3.13.0

更新apt包管理器的軟件包列表

apt-get update

在這里插入圖片描述

  • 使用apt-get安裝必要的構建工具,包括autoconf、automake和libtool,這些工具用于配置和構建開源項目
apt-get install autoconf automake libtool

在這里插入圖片描述

  • 生成配置腳本 configure , 運行 ./configure 生成一個Makefile
./autogen.sh
./configure
  • 編譯源代碼,由于 香橙派 AIpro 是4核64位處理器+ AI處理器支持8個線程,我們我們可以大膽的使用4個并行進程進行編譯,以加快編譯速度。
  • 編譯這里的時候大家就可以放松放松了大概只需要10幾分鐘就好了
make -j4

在這里插入圖片描述

  • 將編譯后的二進制文件和庫文件安裝到系統指定的位置
make install

在這里插入圖片描述

  • 更新系統共享庫緩存的工具,檢查protoc 版本
sudo ldconfigprotoc --version

在這里插入圖片描述

算子編譯部署

  • 將當前工作目錄切換到 tiny_llama

在這里插入圖片描述

  • 設置了一個環境變量 ASCEND_PATH,并將其值設為 /usr/local/Ascend/ascend-toolkit/latest
  • export ASCEND_PATH=/usr/local/Ascend/ascend-toolkit/latest
    在這里插入圖片描述
  • custom_op/matmul_integer_plugin.cc 文件復制到指定路徑
cp custom_op/matmul_integer_plugin.cc $ASCEND_PATH/tools/msopgen/template/custom_operator_sample/DSL/Onnx/framework/onnx_plugin/
  • cd 進入 目標文件夾進行配置
cd $ASCEND_PATH/tools/msopgen/template/custom_operator_sample/DSL/Onnx

在這里插入圖片描述

修改環境變量

  • 打開build.sh,找到下面四個環境變量,解開注釋并修改如下:
#命令為 vim build.sh

在這里插入圖片描述

# 修改內容為
export ASCEND_TENSOR_COMPILER_INCLUDE=/usr/local/Ascend/ascend-toolkit/latest/include
export TOOLCHAIN_DIR=/usr
export AICPU_KERNEL_TARGET=cust_aicpu_kernels
export AICPU_SOC_VERSION=Ascend310B4

在這里插入圖片描述
在這里插入圖片描述

編譯運行& 依賴安裝

  • 編譯構建項目,進入到構建輸出目錄以后續處理生成的文
./build.sh
cd build_out/

在這里插入圖片描述

  • 生成文件到 customize 到默認目錄 $ASCEND_PATH/opp/vendors/
./custom_opp_ubuntu_aarch64.run
  • 刪除冗余文件
cd $ASCEND_PATH/opp/vendors/customize
rm -rf op_impl/ op_proto/

在這里插入圖片描述

  • 安裝依賴:從指定的華為云 PyPI 鏡像源安裝所需的 Python 包
cd tiny_llama/inference
pip install -r requirements.txt -i https://mirrors.huaweicloud.com/repository/pypi/simple
  • 先cd 回到根目錄,在進入家目錄,找到咱們的 tiny_llama/inference
    在這里插入圖片描述

2.3 推理啟動

  • 下載tokenizer文件
cd tokenizer
wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/wanzutao/tiny-llama/tokenizer.zip
unzip tokenizer.zip   

在這里插入圖片描述

  • 獲取onnx模型文件
cd ../model
wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/wanzutao/tiny-llama/tiny-llama.onnx
  • 我們在復制代碼的時候一定要仔細嗷博主這里少打了一個w 導致并沒有獲取到模型,后期找了半天才發現錯誤所以提醒大家一定要注意好每一步
    在這里插入圖片描述

  • atc模型轉換

atc --framework=5 --model="./tiny-llama.onnx"  --output="tiny-llama" --input_format=ND --input_shape="input_ids:1,1;attention_mask:1,1025;position_ids:1,1;past_key_values:22,2,1,4,1024,64" --soc_version=Ascend310B4 --precision_mode=must_keep_origin_dtype

在這里插入圖片描述

三、 項目體驗

好了到這里我們就算是大功告成了,只需要啟動一下mian文件就OK了

  • cd tiny_llama/inference 目錄下運行命令
python3 main.py

在這里插入圖片描述

  • 打開網址進行訪問

在這里插入圖片描述
在這里插入圖片描述

Tiny-Llama這個模型由于尺寸非常小,參數也只有1.1B。所以在我們部署Tiny-Llama這個大語言模型推理過程中,Ai Core的占用率只到60%左右,基本是一秒倆個詞左右,速度上是肯定沒問題的。后期可以去試試升級一下內存去跑一下當下主流的 千問7B模型 或者 清華第二代大模型擁有 60 億參數 ChatGLM2 感覺用 OrangePi AIpro 這塊板子也是沒問題。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/42746.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/42746.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/42746.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

基于Java+SpringMvc+Vue技術智慧校園系統設計與實現--60頁及以上論文參考

博主介紹:碩士研究生,專注于信息化技術領域開發與管理,會使用java、標準c/c等開發語言,以及畢業項目實戰? 從事基于java BS架構、CS架構、c/c 編程工作近16年,擁有近12年的管理工作經驗,擁有較豐富的技術架…

網絡基礎:園區網絡架構

園區網絡 園區網絡(Campus Network)是指在一個相對較大的區域內,如大學校園、企業園區或政府機關等,建立的計算機網絡系統。園區網絡根據規模的不同,可以分為以下幾種類型: ①小型園區網絡:通常…

WebKit中Websockets的全面支持:實現高效實時通信

WebKit中Websockets的全面支持:實現高效實時通信 Websockets是一種網絡通信協議,它允許在單個TCP連接上進行全雙工通信,從而實現服務器與客戶端之間的實時數據交換。WebKit作為許多流行瀏覽器的底層引擎,對Websockets提供了全面的…

Java 多線程工具類 Semaphore

引言 在多線程編程中,控制對共享資源的訪問是一個關鍵問題。Java 提供了多種同步機制來解決這個問題,其中 Semaphore 是一種常用的工具類,用于限制可以同時訪問某個資源的線程數。本文將詳細介紹 Semaphore 的概念、使用方法和實際應用場景。…

ARM GEC6818 LCD繪圖 實心圓 三角形 五角星 任意區域矩形以及旗幟

要在ARM上實現LCD繪圖,可以按照以下步驟進行: 硬件初始化:初始化LCD控制器和相關引腳,配置時鐘、分辨率和顏色深度等。 內存映射:將LCD顯示區域映射到ARM的內存地址空間中,可以通過ARM的內存映射機制來實現。 繪圖函數:實現繪制基本圖形的函數,如點、線、矩形、圓等。可…

【系統架構設計師】八、系統工程基礎知識(系統工程|系統性能)

目錄 一、系統工程 1.1 系統工程的方法 1.1.1 霍爾的三維結構 1.1.2 切克蘭德方法 1.1.3 并行工程方法 1.1.4 綜合集成法 1.1.5.WSR 系統方法。 二、系統工程生命周期 2.1 系統工程生命周期7階段 2.2 生命周期方法 三、基于模型的系統工程(MBSE) 四、系統性能 4.1…

vb.netcad二開自學筆記6:第一個繪制線段命令

.net編寫繪制直線已完全不同于ActiveX的(VBA)的方式,過程更類似于arx程序,需要通過操作AutoCAD 數據庫添加對象!下面的代碼是在以前代碼基礎上添加了一個新myline命令。 AutoCAD 數據庫結構 myline命令代碼 Imports A…

YoloV9改進策略:Block改進|輕量實時的重參數結構|最新改進|即插即用(全網首發)

摘要 本文使用重參數的Block替換YoloV9中的RepNBottleneck,GFLOPs從239降到了227;同時,map50從0.989漲到了0.99(重參數后的結果)。 改進方法簡單,只做簡單的替換就行,即插即用,非常…

使用ndoe實現自動化完成增刪改查接口

使用ndoe實現自動化完成增刪改查接口 最近工作內容比較繁瑣,手里需要開發的項目需求比較多,常常在多個項目之間來回切換,有時候某些分支都不知道自己開發了什么、做了哪些需求, 使用手寫筆記的方式去記錄分支到頭來也是眼花繚亂&a…

vscode調試教程

VSCode調試 VSCode Debuggers VSCode使用launch.json進行細粒度的控制,可以啟動程序或將其附加到復雜的調試場景中 打開Run and Debug視圖Ctrl Shift D 點擊create a launch.json file,選擇C(GDB/LLDB) 會在工作目錄自動創建.vscode/launch.json文…

【MyBatis】MyBatis 理論 40 問(二)

《MyBatis 理論 40 問》包含以下 2 篇文章: MyBatis 理論 40 問(一)MyBatis 理論 40 問(二) MyBatis 理論 40 問(二) 21.如何獲取生成的主鍵?22.當實體類中的屬性名和表中的字段名不…

influxQL基本語法及常用的聚合函數

InfluxQL(Influx Query Language)是與InfluxDB緊密集成的一種SQL風格的語言,專為處理時間序列數據而設計。其基本語法結構清晰,方便開發者理解和實現。以下是對InfluxQL基本語法及常用聚合函數的簡單介紹: 目錄 一、…

Docker Dockerfile:構建與優化

Docker Dockerfile:構建與優化 簡介 Docker 是一種廣泛使用的容器化技術,它允許開發人員將應用程序及其依賴環境打包到一個可移植的容器中。Dockerfile 是 Docker 中用于自動化容器鏡像構建的腳本文件。本文將詳細介紹 Dockerfile 的基本結構、指令使用…

【Python】已解決:(MongoDB安裝報錯)‘mongo’ 不是內部或外部命令,也不是可運行的程序

文章目錄 一、分析問題背景二、可能出錯的原因三、錯誤代碼示例四、正確代碼示例及解決方案五、注意事項 已解決:(MongoDB安裝報錯)‘mongo’ 不是內部或外部命令,也不是可運行的程序 一、分析問題背景 在安裝和配置MongoDB時,有…

怎樣在 PostgreSQL 中優化對 UUID 數據類型的索引和查詢?

文章目錄 一、UUID 數據類型概述二、UUID 索引和查詢的性能問題三、優化方案(一)選擇合適的索引類型(二)壓縮 UUID(三)拆分 UUID(四)使用覆蓋索引(五)優化查詢…

一二三應用開發平臺應用開發示例(6)——代碼生成、權限配置、運行效果查看

生成代碼 完成配置工作,接下來就是見證奇跡的時刻~ 返回到實體列表,選中“文件夾”記錄,點擊“生成代碼”按鈕,提示成功后,在項目的output目錄下輸出了平臺基于配置模板產生的各層代碼,在原有后端的基礎上…

Pyserial設置緩沖區大小失敗

文章目錄 問題描述原因分析解決方案 問題描述 使用set_buffer_size()設置緩沖區大小后,buffer size仍為默認的4096 import time import serial ser serial.Serial(baudrate9600, timeout0.5) ser.port COM1 ser.set_buffer_size(rx_size8192) ser.open() while …

windows上部署python3.11

hello,大家好,我是一名測試開發工程師,至今已在自動化測試領域深耕9個年頭,現已將本人實戰多年的多終端自動化測試框架【wyTest】開源啦,在接下來的一個月里,我將免費指導大家使用wyTest,請大家…

歐拉函數.

性質1:質數n的歐拉函數為n-1. 性質2:如果p,q都是質數,那么? ( p ? q ) ? ( p ) ? ? ( q ) ( p ? 1 ) ? ( q ? 1 ) 證明:p,2p....q*p都不與q*p互質,q同理,所以總的不互質個…

JavaEE初階-網絡編程

文章目錄 前言一、UDP與TCP1.1 有連接與無連接1.2 全雙工1.3 可靠傳輸與不可靠傳輸1.4 面向子節流與面向數據報 二、UDP回顯服務器及客戶端編寫三、UDP字典服務器四、TCP回顯服務器及客戶端編寫五、數據序列化的方式5.1 基于行文本的方式傳輸5.2 基于XML的格式5.3 基于json5.4 …