
.10自然語言處理項目鏡像部署教程想要迅速搭建一個歸屬于自身的 AI 開發(fā)環(huán)境, 然而又不愿被繁雜的依賴以及版本沖突弄得顧此失彼、疲憊不堪? 今日, 就在這里講述一下怎樣運用最為簡單的方式, 在.10 環(huán)境里面, 借由一個預(yù)先配置好的鏡像, 順利實行部署生態(tài), 進而開始你的自然語言處理項目。這個教程的關(guān)鍵要點, 是一個被稱作 -.10 的鏡像, 你能夠?qū)⑵漕I(lǐng)會成一個“拿來就能用”的AI開發(fā)工具集合, 它已然為你預(yù)備好了3.10這個穩(wěn)定且具備豐富功能的版本, 另外還有這個強大的環(huán)境管理工具。這表明你不需要通過手動方式去安裝、處理環(huán)境變量, 更不用為不同項目之間的包版本沖突而憂心。不管是想要運行熱門的在途模型, 又或是開展自身的模型微調(diào)試驗, 這個環(huán)境都能夠讓你達成事倍功半的效果, 就跟教程核心提供的這個名為 -.10 的鏡像一樣, 這個鏡像你可以理解為“開箱即用”的AI開發(fā)套件, 它準備好的版本穩(wěn)定且功能豐富, 還有強大的環(huán)境管理工具, 有了它不用手動安裝、配置環(huán)境變量, 不用擔心不同項目包版本打架, 在這個環(huán)境跑通熱門模型或進行自己的模型微調(diào)實驗, 都能事半功倍。接下來, 我會一步一步地, 帶著你去完成那整個的流程, 從環(huán)境啟動開始, 一直到運行第一個模型。整個的這個過程, 是那樣清晰看得明白, 就算是才剛剛接觸到AI領(lǐng)域的新手, 也能夠比較輕松地跟隨著行進不亂套。1. 環(huán)境準備與快速啟動首先, 我們得去獲取, 然后啟動這個被稱作“工具箱”的東西。這里給出了兩種主流的交互方式, 一種方式, 還有SSH終端這種方式。你能夠依據(jù)自身習慣, 在這兩者之中隨意選擇其中一個。1.1 通過 啟動推薦新手有一個網(wǎng)頁版的, 且是交互式的編程環(huán)境被提供了, 它特別適宜用來學習以及探索, 原因在于你能夠一邊書寫代碼, 一邊去查看結(jié)果。拿取鏡像: 找尋并且開啟 -.10 鏡像, 進入網(wǎng)絡(luò)界面, 鏡像開啟之后, 系統(tǒng)平常將會給出一個入口鏈接, 點選它, 您會見到一個仿若下圖的文件管理界面。去進行新建操作, 要點擊右上角位置的“New”按鈕, 之后選擇“ 3”以此來創(chuàng)建出一個新的筆記本。已然準備妥當: 現(xiàn)下, 你會于新標簽頁里瞧見一個空的代碼單格Cell。全部我們的操作都會在這些單格當中達成。1.2借助SSH終端推行啟動推舉進階用戶設(shè)若你更傾向于在命令行的環(huán)境之下開展相關(guān)工作, 又或者要求實施某些文件的操作行為, 那么SSH這種方式是于你而言更為徑直的一種選取。獲取SSH相關(guān)信息, 即開啟鏡像之后, 尋覓所給到的SSH連接指令, 連同IP地址, 以及端口號, 還有密碼。連接終端之時, 開啟你本地的終端程序諸如系統(tǒng)下的CMD, 或者Mac/Linux系統(tǒng)對應(yīng)的工具, 鍵入差不多如下這般的命令去實施連接:ssh root你的鏡像IP -p 端口號輸入密碼后你就進入了鏡像系統(tǒng)的命令行環(huán)境。驗證環(huán)境連接成功后你可以通過幾個簡單命令檢查環(huán)境。python --version # 應(yīng)顯示 Python 3.10.x conda --version # 應(yīng)顯示 conda 版本信息不論挑選哪一種途徑, 我們的, 處于3.10加上的那種環(huán)境, 已然準備妥當。緊接著, 我們著手給項目安裝必需的“部件”。2. 安裝核心AI庫這是我們的鏡像, 它已經(jīng)自帶了和包管理工具, 然而呢一些AI專用的庫, 需要我們自己去安裝, 別擔心, 這個過程是非常簡單的。于其中: 徑直在首個代碼單元格之內(nèi)輸入如下的命令, 隨后按Shift與Enter組合鍵予以運行。于SSH終端那兒: 直接在命令行當中輸入便可。首先, 我們進行深度學習框架的安裝, 以及與之相關(guān)的GPU支持庫的安裝, 要是你的環(huán)境能夠支持CUDA, 這般會使模型運行加速, 情況就是如此。pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118小提示: 上段鏈接里的cu118, 它表示的是CUDA 11.8, 如果你的環(huán)境當中不存在GPU, 或者僅僅想用CPU去運行, 那么能夠采用pip torch這種方式來安裝CPU版本。接下來, 要安裝核心庫, 還有另外一個。前者給出了數(shù)目眾多至上萬這樣多的預(yù)訓練模型, 后者涵蓋了有著豐富內(nèi)容的數(shù)據(jù)集合, 這能便利我們?nèi)ラ_展訓練以及進行評估。pip install transformers datasets為了使得數(shù)據(jù)處理可更高效些, 我們通常情形下還會去安裝, 專門用于簡化分布式訓練的部分, 以及專門用于模型評估的部分。pip install accelerate evaluate最后, 安裝一個常用的, 某些模型像T5, mT5會用到的工具包。pip install sentencepiece安裝完成后你可以通過以下代碼快速驗證主要庫是否安裝成功# 在Jupyter的單元格或Python腳本中運行 import torch import transformers print(fPyTorch 版本: {torch.__version__}) print(fTransformers 版本: {transformers.__version__}) # 檢查CUDA是否可用如果有GPU print(fCUDA 可用: {torch.cuda.is_available()})要是所有方面都順遂發(fā)展, 你便會瞧見與之對應(yīng)的版本編號, 還有關(guān)于CUDA能不能夠被使用的提示信息。到了這個時候, 你的AI開發(fā)環(huán)境已然是全方位都配置妥當啦3. 快速上手運行你的第一個模型環(huán)境搭建完成了, 我們著手實際相關(guān)事宜呢。極為便利之一情況是, 通過寥寥幾行代碼即可調(diào)用強大的預(yù)訓練模型。我們嘗試一項經(jīng)典的文本分類任務(wù): 判定一條評論里的情感屬于正面還是負面。我們將使用 API這是提供的最簡單的模型調(diào)用方式。from transformers import pipeline # 創(chuàng)建一個情感分析管道模型會自動從Hub下載 classifier pipeline(sentiment-analysis) # 準備一些測試句子 test_texts [ I love this product! Its absolutely amazing., This is the worst experience Ive ever had., The item is okay, not great but not terrible either. ] # 進行預(yù)測 results classifier(test_texts) # 打印結(jié)果 for text, result in zip(test_texts, results): print(f文本: {text}) print(f 情感: {result[label]}, 置信度: {result[score]:.4f}) print(- * 50)實施該段代碼的運行任務(wù), 你便將會察覺到模型針對每一句話給定了“正面”或者“負面”這樣的判定, 并且還存在著一個置信度分數(shù)情況。在整個流程之中, 模型的下載、加載以及推理的這些操作都是自行達成的, 難道不是極為簡易的嗎?4. 進階實踐微調(diào)一個文本分類模型只是單單運用預(yù)訓練模型, 不會覺得足夠過癮嗎? 我們?nèi)L試用自身的數(shù)據(jù)來進行微調(diào), 也就是去Fine-tune一個模型, 要讓它變?yōu)楦朴诮鉀Q針對特定問題的一種狀態(tài)。在這里挑選英文電影評論數(shù)據(jù)集, 確切來講是IMDb來作為例子, 去微調(diào)出一個用于進行情感分類工作模式的BERT模型。4.1 加載數(shù)據(jù)集和模型首先, 我們把IMDb數(shù)據(jù)集從庫加載出來, 并且加載一個預(yù)訓練的BERT模型以及跟它對應(yīng)的分詞器。from datasets import load_dataset from transformers import AutoTokenizer, AutoModelForSequenceClassification # 1. 加載數(shù)據(jù)集 print(正在加載IMDb數(shù)據(jù)集...) dataset load_dataset(imdb) print(dataset) # 2. 加載分詞器和模型 # 我們使用一個較小的BERT變體‘distilbert-base-uncased’訓練更快 model_name distilbert-base-uncased tokenizer AutoTokenizer.from_pretrained(model_name) # 指定分類標簽數(shù)為2正面/負面 model AutoModelForSequenceClassification.from_pretrained(model_name, num_labels2) print(f模型和分詞器 {model_name} 加載完成)4.2 預(yù)處理數(shù)據(jù)模型沒辦法直接去處理文本, 得先借助分詞器把它轉(zhuǎn)化為數(shù)字ID, 也就是Token IDs。def preprocess_function(examples): # 對文本進行分詞、截斷和填充 return tokenizer(examples[text], truncationTrue, paddingmax_length, max_length512) # 對數(shù)據(jù)集的所有分片train, test應(yīng)用預(yù)處理函數(shù) tokenized_datasets dataset.map(preprocess_function, batchedTrue) # 為了訓練我們重命名標簽列并設(shè)置格式為PyTorch張量 tokenized_datasets tokenized_datasets.rename_column(label, labels) tokenized_datasets.set_format(torch) # 從訓練集中取一小部分作為演示為了節(jié)省時間 small_train_dataset tokenized_datasets[train].shuffle(seed42).select(range(1000)) small_eval_dataset tokenized_datasets[test].shuffle(seed42).select(range(200))4.3 配置訓練參數(shù)并開始微調(diào)使用的 API可以大大簡化訓練循環(huán)。from transformers import TrainingArguments, Trainer import numpy as np from datasets import load_metric # 定義評估函數(shù)計算準確率 def compute_metrics(eval_pred): metric load_metric(accuracy) logits, labels eval_pred predictions np.argmax(logits, axis-1) return metric.compute(predictionspredictions, referenceslabels) # 設(shè)置訓練參數(shù) training_args TrainingArguments( output_dir./my_imdb_model, # 模型輸出目錄 evaluation_strategyepoch, # 每個epoch結(jié)束后評估 save_strategyepoch, # 每個epoch結(jié)束后保存 learning_rate2e-5, # 學習率 per_device_train_batch_size8, # 每個設(shè)備的訓練批次大小 per_device_eval_batch_size8, # 每個設(shè)備的評估批次大小 num_train_epochs3, # 訓練輪數(shù)為了演示只設(shè)3輪 weight_decay0.01, # 權(quán)重衰減 logging_dir./logs, # 日志目錄 logging_steps10, load_best_model_at_endTrue, # 訓練結(jié)束后加載最佳模型 ) # 初始化Trainer trainer Trainer( modelmodel, argstraining_args, train_datasetsmall_train_dataset, eval_datasetsmall_eval_dataset, tokenizertokenizer, compute_metricscompute_metrics, ) print(開始訓練...) trainer.train() print(訓練完成)訓練終結(jié)之后, 模型會自行存于./ 這個目錄之中。你能夠借用它開展預(yù)測, 恰似我們最開始所用到的那般。4.4 使用微調(diào)后的模型進行預(yù)測# 加載我們剛剛微調(diào)好的模型 from transformers import TextClassificationPipeline fine_tuned_model AutoModelForSequenceClassification.from_pretrained(./my_imdb_model/best_model) # 假設(shè)最佳模型保存在此 fine_tuned_tokenizer AutoTokenizer.from_pretrained(./my_imdb_model/best_model) custom_classifier TextClassificationPipeline(modelfine_tuned_model, tokenizerfine_tuned_tokenizer) # 測試一些新的評論 new_reviews [ The plot was predictable and the acting was subpar., A heartwarming story with brilliant performances., It was fine, Ive seen better. ] predictions custom_classifier(new_reviews) for review, pred in zip(new_reviews, predictions): print(f評論: {review}) print(f 預(yù)測: {pred[label]}, 分數(shù): {pred[score]:.4f})5. 實用技巧與常見問題 5.1 環(huán)境管理與依賴凍結(jié)的強大之處在于環(huán)境隔離。建議為每個項目創(chuàng)建獨立的環(huán)境# 在終端中執(zhí)行 conda create -n my_nlp_project python3.10 conda activate my_nlp_project # 然后在這個新環(huán)境里安裝上述所有包保存環(huán)境依賴方便復(fù)現(xiàn)pip freeze requirements.txt # 別人可以通過 pip install -r requirements.txt 一鍵安裝所有依賴5.2 加速下載與模型緩存模型默認從海外下載可能會慢??梢栽O(shè)置鏡像源import os os.environ[HF_ENDPOINT] https://hf-mirror.com # 在加載模型或數(shù)據(jù)集之前設(shè)置模型在默認狀況之下, 將會被下載至~/.cache//這一位置。要是你的系統(tǒng)盤空間處在不足的情形, 那么能夠?qū)彺媛窂接枰孕薷?os.environ[TRANSFORMERS_CACHE] /path/to/your/cache5.3遇到問題時的排查思路, 或者說, 百分之九十九的情形下是包沒有安裝, 這時要用pip list檢查是否安裝了torch等, 并且用pip進行補裝。CUDA出現(xiàn)問題, 原因是模型或者批次太大, 導致顯存不足。需要嘗試, 下載模型失敗或者超時的話, 要檢查網(wǎng)絡(luò), 或者使用上述的鏡像源設(shè)置。運行速度慢的話, 要確認CUDA是否可用, 憑借torch.cuda.()來判斷。要是得出的結(jié)果為False, 那么模型將會在CPU上運行, 速度會極其緩慢。6.總結(jié)。通過這篇教程我們完成了一個完整的自然語言處理項目閉環(huán)環(huán)境搭建方面, 借助-.10鏡像, 我們差不多在幾乎零配置的狀況下, 實現(xiàn)了獲取一個干干凈凈又相互隔離的3.10開發(fā)環(huán)境。之于工具安裝, 我們開展了安裝與生態(tài)的核心庫這一行為, 從而給AI項目準備好了“武器庫”。就快速體驗而言, 運用API, 我們僅僅憑借幾行代碼便達成了體驗預(yù)訓練模型的強大能力這一點。針對于深度實踐, 我們逐個步驟地完成了從數(shù)據(jù)加載、預(yù)處理、模型微調(diào)一直到最終預(yù)測的一整個完整流程, 進而掌握了使用微調(diào)模型的核心方式。這個按鏡像所構(gòu)建的部署辦法, 其最大的益處就在于具備可重復(fù)再現(xiàn)的特征以及方便捷便的特性。你根本不用為操作系統(tǒng)之間所存在的差異、底層依賴相互之間帶來的沖突困擾操心, 能夠把相較以前更加多的精力著重匯聚于模型、數(shù)據(jù)以及算法自身。不管是處于學習的階段、實驗進行的時期還是原型得以發(fā)展建設(shè)的進程之中, 這確實皆是這樣一條極為高效率的門道。下一步你可以嘗試愿此教程成為你踏入AI大千世界的一塊無比堅實的助力跳板, 動手操作運行一回代碼, 你會對全個過程懷有更具深度的理解, 祝你開發(fā)能夠心情愉悅