在機器學習專案中,評估模型的效能至關重要。常用的指標包含精確度、損失和 F1 分數,分別衡量模型的整體正確率、訓練過程中的表現以及精確度和召回率的平衡。為確保模型版本的可追溯性和安全性,本文將介紹如何使用 Hyperledger Fabric 建立區塊鏈例項,並應用於模型版本管理和審查。首先,需設定 Hyperledger Fabric 環境,包含下載二進位制檔案、生成憑證、設定區塊鏈網路以及啟動節點等步驟。接著,我們將安裝和佈署必要的鏈碼,例如 project 和 model-version 鏈碼,用於管理專案和模型版本資訊。此外,正確組態錨點同儕對於區塊鏈網路的穩定執行也至關重要。最後,我們將以 Model Review 鏈碼為例,說明如何利用區塊鏈技術實作模型審查流程,確保模型版本的安全性和可信度。
精確度、損失和評估指標
在機器學習中,評估模型的效能是非常重要的。精確度(Accuracy)、損失(Loss)、精確度(Precision)、召回率(Recall)和 F1 分數(F1 Score)是常用的評估指標。
精確度(Accuracy)
精確度代表模型在獨立的測試資料集上的識別能力。它是用來評估模型在訓練和測試資料集上的效能的。通常,資料會被分成 80% 的訓練資料和 20% 的測試資料。
損失(Loss)
損失值表示模型在每次最佳化迭代後的表現。當訓練損失遠大於測試損失時,模型被認為是欠擬合(Underfitting);當訓練損失遠小於測試損失時,模型被認為是過擬合(Overfitting)。理想的情況是訓練損失和測試損失接近。
精確度(Precision)
精確度代表正確預測的標籤中真正正確的比例。它是用來衡量模型在正確預測中的精確程度的。精確度會受到類別分佈的影響,當少數類別的樣本更多時,精確度會降低。
召回率(Recall)
召回率代表模型在真正正確的結果中正確預測的比例。它是用來衡量模型在預測正確結果中的能力的。召回率也被稱為敏感度或真陽性率。
F1 分數(F1 Score)
F1 分數是精確度和召回率的調和平均數。它是用來衡量模型的整體效能的,尤其是在精確度和召回率之間需要做出平衡的時候。
區塊鏈例項化
現在您已經有一個模型和其相關資料,您可以例項化區塊鏈了。您將使用 Hyperledger Fabric 作為區塊鏈系統。您將建立一個 Hyperledger Fabric 區塊鏈例項,測試它,並實作鏈碼。您將設定一個單節點,該節點將透過 BTA 介面由玄貓使用。
Hyperledger Fabric 2.0 所需節點
Hyperledger Fabric 2.0+ 用於建立區塊鏈網路。區塊鏈網路由節點組成。Hyperledger Fabric 需要某些節點才能執行。這些節點有自己的責任:
- 排序節點(Orderer):負責接收事務,將事務新增到區塊中,並將區塊分發給網路中的節點。
- 網路同行(Network Peer):負責驗證和儲存區塊鏈上的資料。
- 鏈碼(Chaincode):負責實作智慧合約的邏輯。
安裝 Node.js、npm 和 NestJS
Node.js 包含 npm,兩者都需要用於本章的練習。按照 Node.js 網站的指示下載和安裝 Node.js 和 npm。NestJS 是一個用於構建 Node.js 應用的 JavaScript 框架。按照 NestJS 網站的指示下載和安裝 NestJS。
Hyperledger Fabric 環境設定
Hyperledger Fabric 是一個區塊鏈平臺,允許使用者建立自己的區塊鏈網路。以下是設定 Hyperledger Fabric 環境的步驟:
下載和安裝 Hyperledger Fabric 二進位制檔案
首先,需要下載和安裝 Hyperledger Fabric 二進位制檔案。可以使用以下命令:
cd bta-blockchain/script
./downloadBinaryFiles.sh
這個命令會下載和安裝所需的 Hyperledger Fabric 二進位制檔案。
生成憑證檔案
接下來,需要生成憑證檔案。可以使用以下命令:
./generateCertificates.sh
這個命令會生成所需的憑證檔案。
設定區塊鏈網路
設定區塊鏈網路需要建立 genesis 檔案、channel 檔案和 anchor peer 檔案。可以使用以下命令:
./createGenesisBlock.sh
./createChannel.sh
./createAnchorPeer.sh
這些命令會建立所需的檔案。
啟動區塊鏈節點
最後,需要啟動區塊鏈節點。可以使用以下命令:
./startNetwork.sh
這個命令會啟動區塊鏈節點。
連線到區塊鏈網路
連線到區塊鏈網路需要使用 Hyperledger Fabric CLI。可以使用以下命令:
docker-compose -f docker-compose-cli.yaml up -d
這個命令會啟動 Hyperledger Fabric CLI。
安裝和啟動 chaincode
安裝和啟動 chaincode 需要使用以下命令:
./installChaincode.sh
./instantiateChaincode.sh
這些命令會安裝和啟動 chaincode。
測試區塊鏈網路
測試區塊鏈網路需要使用以下命令:
./testNetwork.sh
這個命令會測試區塊鏈網路。
內容解密:
以上命令都是用於設定和啟動 Hyperledger Fabric 區塊鏈網路。每個命令都有其特定的功能,例如下載和安裝二進位制檔案、生成憑證檔案、設定區塊鏈網路、啟動區塊鏈節點、連線到區塊鏈網路、安裝和啟動 chaincode、測試區塊鏈網路等。
圖表翻譯:
以下是 Hyperledger Fabric 區塊鏈網路的架構圖:
graph LR A[Client] -->|invoke|> B[Peer] B -->|endorse|> C[Orderer] C -->|broadcast|> D[Peer] D -->|commit|> E[Client]
這個圖表展示了 Hyperledger Fabric 區塊鏈網路的基本架構,包括 client、peer、orderer 和 chaincode。client 可以向 peer 傳送 invoke 請求,peer 將ENDORSE請求並將其傳送給 orderer,orderer 將 broadcast 請求給所有 peer,peer 將 commit 請求並將結果傳回給 client。
執行指令碼
在您的作業系統終端機視窗中,可以執行 Shell 指令碼(.sh 檔案),這些檔案位於 bta-blockchain 儲存函式庫的指令碼資料夾中。如果您犯了錯誤或出於某種原因想要多次嘗試此部分的練習,可以執行 ./removeCertificates.sh
指令碼來刪除之前生成的憑證,然後再試一次。另外,如果您已經嘗試過安裝並想要重新開始,可以刪除 bta-blockchain 儲存函式庫並重新克隆它,而不會影響您已經在 bta-aimodel 中完成的組態。
如果您想要對指令碼進行故障排除或在執行之前檢視它,可以使用編輯器開啟它,或者使用類似於 less
的終端命令來快速在螢幕上顯示指令碼的內容:
$ less generateCertificates.sh
當每頁文字暫停時,您可以按空格鍵顯示下一頁。輸入 q
可以停止顯示並傳回命令提示符。
請注意,這些 Shell 指令碼在名稱前加上了 ./
,因為它們已經被設定為可執行檔案(使用 chmod +x
)。或者,您也可以在指令碼名稱前加上 sh
,例如:
$ sh generateCertificates.sh
如第 2 章所述,指令碼會為 CA 生成憑證,以便於傳輸層安全性(TLS),也就是安全套接層(SSL)。它會為區塊鏈排序器生成組織 CA;為超級管理員、組織管理員、AI 工程師、MLOps 工程師和利益相關者生成組織和中間 CA,以及成員服務提供者(MSP)憑證和 TLS憑證。
TLS CA 保證網路上所有節點之間的通訊安全。組織 CA 是一個組織的身份註冊 CA,為每個組織建立,以便在區塊鏈網路中註冊身份。中間 CA 用於隱藏根 CA(在本例中為組織 CA)的暴露。中間 CA 代表根 CA 向區塊鏈網路中的身份註冊身份。
生成排序器的創世區塊
在安裝 Hyperledger Fabric 網路之前,您需要為排序器生成創世區塊,這是其第一個區塊。雖然每個頻道都有一個創世區塊,但排序器的創世區塊很特殊,因為它定義了其他頻道的組態。如果您想充分了解 Hyperledger Fabric 中創世區塊的使用方式,可以存取它們的「頻道組態」檔案。執行以下指令碼來建立排序器的創世區塊:
$ ./generateGenesisBlock.sh
創世區塊生成後,您將看到確認訊息:
------------------------------------
成功生成創世區塊
------------------------------------
生成頻道組態檔案
下一步是生成頻道組態檔案。執行頻道組態生成指令碼:
$ ./generateChannelConfiguration.sh
生成後,將顯示確認訊息:
--------------------------------------------------
成功生成頻道組態檔案
--------------------------------------------------
生成錨點同儕組態檔案
接下來,生成錨點同儕組態檔案:
$ ./generateAnchorPeer.sh
生成後,將顯示確認訊息。
Hyperledger Fabric 節點啟動與故障排除
在 Hyperledger Fabric 的設定過程中,啟動節點是最後的一個步驟。這個步驟需要使用 Docker 來下載和執行節點。以下是啟動節點的步驟:
啟動 Docker
在啟動節點之前,需要確保 Docker 已經安裝並執行。如果您使用的是 Mac,需要在 Docker Desktop 的設定中取消「Use gRPC FUSE for file sharing」的選項,以避免節點啟動失敗。
執行節點啟動指令碼
啟動節點的指令碼通常命名為 runNodes.sh
。執行這個指令碼會啟動所有的節點,包括 peer0.o4-mlops.bta.kilroy、peer0.o1-super-admin.bta.kilroy 等。
$ ./runNodes.sh
節點啟動成功
如果節點啟動成功,會顯示以下的輸出:
Starting peer0.o4-mlops.bta.kilroy ... done
Starting peer0.o1-super-admin.bta.kilroy ... done
Starting peer0.o3-sh.bta.kilroy ... done
Starting peer0.o5-ai-engineer.bta.kilroy ... done
Starting peer0.o2-admin.bta.kilroy ... done
故障排除
如果在啟動節點的過程中遇到問題,需要進行故障排除。以下是一些常見的問題和解決方法:
- Docker 連線失敗:如果出現「Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?」的警告,需要確保 Docker 已經安裝並執行。
- Intermediate CA 節點啟動失敗:如果出現「WARNING: Found orphan containers …」的警告,需要執行
./removeArtifacts.sh
指令碼來清除問題,然後使用./stopNodes.sh
和./runNodes.sh
指令碼來重新啟動節點。
圖表翻譯:
flowchart TD A[啟動 Docker] --> B[執行節點啟動指令碼] B --> C[節點啟動成功] C --> D[顯示節點啟動成功輸出] B --> E[節點啟動失敗] E --> F[進行故障排除] F --> G[解決 Docker 連線失敗問題] F --> H[解決 Intermediate CA 節點啟動失敗問題]
內容解密:
以上的步驟和故障排除方法可以幫助您成功啟動 Hyperledger Fabric 節點。如果您在啟動節點的過程中遇到任何問題,需要仔細檢查每個步驟,確保所有的設定都正確無誤。同時,也需要注意 Docker 的版本和 docker-compose 的版本,確保它們是相容的。
Hyperledger Fabric區塊鏈平臺設定
Hyperledger Fabric是一個開源的區塊鏈平臺,廣泛應用於各種行業。以下是設定Hyperledger Fabric區塊鏈平臺的步驟:
建立和加入頻道
區塊鏈聯結器是一個Node.js模組,位於應用層,負責連線到特定的區塊鏈節點。要啟動區塊鏈平臺,需要建立頻道、加入頻道、設定錨點同儕,並安裝和佈署鏈碼。
建立頻道
頻道是區塊鏈網路中不同成員之間的私密和保密通訊方式。建立頻道步驟如下:
- 建立全球頻道(global-channel):這是預設的頻道,供超級管理員使用。
- 建立公司頻道(c1-channel):這是公司頻道,供公司相關使用者使用。
- 建立AI工程師頻道(o5-ai-engineer-channel):這是AI工程師的私人頻道,供AI工程師分享私人資料。
加入頻道
不同組織的節點需要加入相應的頻道。以下是加入頻道的步驟:
- 執行指令碼
./createChannel.sh
建立頻道。 - 執行指令碼
./joinChannels.sh
加入頻道。
鏈碼安裝和佈署
鏈碼是區塊鏈平臺的智慧合約。要安裝和佈署鏈碼,需要執行以下步驟:
- 安裝鏈碼:使用
./installChaincode.sh
指令碼安裝鏈碼。 - 佈署鏈碼:使用
./deployChaincode.sh
指令碼佈署鏈碼。
節點管理
節點是區塊鏈平臺的基本單位。要管理節點,需要執行以下步驟:
- 啟動節點:使用
docker ps
命令檢視正在執行的節點。 - 停止節點:使用
./stopAndRemoveNodes
指令碼停止節點。
模型版本管理
模型版本是AI工程師建立的私人資料。要管理模型版本,需要執行以下步驟:
- 建立模型版本:AI工程師建立模型版本並提交到公司頻道。
- 提交模型版本:AI工程師提交模型版本到公司頻道。
- 存取模型版本:其他使用者可以存取提交的模型版本。
圖表翻譯:
此圖表示Hyperledger Fabric區塊鏈平臺的設定和管理流程。從建立頻道開始,然後加入頻道,接著安裝和佈署鏈碼,然後管理節點,最終實作模型版本管理。
Hyperledger Fabric 中的錨點同儕組態
在加入頻道後,每個節點需要更新其頻道組態,以包含錨點同儕組態檔案 configtx.yaml
。這個檔案是 Hyperledger Fabric 中的一個開發者檔案,用於定義錨點同儕。更新錨點同儕將為每個組織定義錨點同儕。可以執行以下指令碼來更新錨點同儕:
./addAnchorPeer.sh
使用 Chaincodes
Chaincodes 是 Hyperledger Fabric 中的智慧合約,用於讀取和更新帳本。Chaincodes 需要在每個節點上安裝,以便節點可以執行交易。以下章節中討論的 Chaincodes 是使用 Go 編寫的,並安裝在區塊鏈網路上。
UML 類別圖
UML 類別圖是一種結構圖,用於顯示系統的類別、屬性、操作和物件之間的關係。可以使用 UML 類別圖來解釋程式碼。一個名為 go-plantuml
的工具被用來生成 UML 類別圖,從 Go 程式碼中生成。
錨點同儕組態
錨點同儕組態是 Hyperledger Fabric 中的一個重要概念,用於定義每個組織的錨點同儕。可以使用 configtx.yaml
檔案來定義錨點同儕。
Chaincode 安裝
Chaincode 需要在每個節點上安裝,以便節點可以執行交易。可以使用以下命令來安裝 Chaincode:
peer chaincode install -n mychaincode -v 1.0 -p github.com/hyperledger/fabric-samples/chaincode/chaincode_example02/go/
錯誤程式碼
錯誤程式碼是 Hyperledger Fabric 中的一個重要概念,用於定義錯誤的性質。可以使用以下錯誤程式碼來定義錯誤:
const (
OK = 200
BAD_REQUEST = 400
NOT_FOUND = 404
INTERNAL_SERVER_ERROR = 500
CONFLICT = 409
)
圖表翻譯:
以下是 UML 類別圖的圖表翻譯:
classDiagram class Chaincode { + install() + instantiate() } class Peer { + installChaincode(Chaincode) + instantiateChaincode(Chaincode) } class Organization { + defineAnchorPeer(Chaincode) } Chaincode --* Peer Peer --* Organization
這個圖表顯示了 Chaincode、Peer 和 Organization 之間的關係。Chaincode 可以被安裝和例項化,Peer 可以安裝和例項化 Chaincode,Organization 可以定義錨點同儕。
瞭解區塊鏈中的鏈碼
鏈碼(chaincode)是區塊鏈中的智慧合約,負責執行特定的邏輯和業務流程。它們可以用不同的語言編寫,例如Go、Java和Python。在這篇文章中,我們將探討鏈碼的基本概念和它們在區塊鏈中的應用。
鏈碼的結構
鏈碼的結構通常包括多個類別和函式,每個類別和函式都有特定的功能。例如,鏈碼可以包括用於資料儲存和查詢的類別,也可以包括用於資料處理和驗證的函式。
鏈碼之間的關係
鏈碼之間可以有複雜的關係,例如一個鏈碼可以呼叫另一個鏈碼的函式。這些關係可以用UML(統一建模語言)圖表來表示,例如圖6-4所示。
鏈碼的回應結構
鏈碼的回應結構通常包括狀態碼、訊息和結果等欄位。這些欄位可以用JSON格式來表示,例如例6-2所示。
取得交易時間
鏈碼可以使用GetTxDateTimeString函式來取得交易時間,並將其轉換為人類可讀的格式。這個函式可以用來記錄交易時間和其他相關資料。
專案和專案版本
專案和專案版本是鏈碼中的兩個重要概念。專案代表了一個特定的業務流程或應用,專案版本代表了專案的不同版本。這些概念可以用UML圖表來表示,例如圖6-5和圖6-6所示。
鏈碼的安裝
鏈碼可以在不同的組織和頻道中安裝,例如c1-channel。安裝鏈碼需要使用特定的指令碼和命令,例如下面的命令:
// 安裝鏈碼到peer節點
func InstallChaincode(peer string, chaincode string, channel string) error {
// ...
}
這個函式可以用來安裝鏈碼到指定的peer節點和頻道中。
內容解密:
在上面的內容中,我們討論了鏈碼的基本概念和它們在區塊鏈中的應用。鏈碼的結構、關係和回應結構是非常重要的,同時取得交易時間和專案版本也是鏈碼中的重要概念。透過這篇文章,我們希望您能夠更好地理解鏈碼和它們在區塊鏈中的應用。
圖表翻譯:
圖6-4所示的是鏈碼之間的關係圖,圖6-5和圖6-6所示的是專案和專案版本的UML圖表。這些圖表可以用來表示鏈碼之間的複雜關係和專案版本的不同版本。
flowchart TD A[鏈碼] --> B[鏈碼之間的關係] B --> C[專案和專案版本] C --> D[鏈碼的安裝] D --> E[鏈碼的應用]
這個流程圖可以用來表示鏈碼的基本概念和它們在區塊鏈中的應用。
Hyperledger Fabric 中的 Chaincode 安裝與佈署
Hyperledger Fabric 中的 Chaincode 是用於定義區塊鏈系統邏輯的程式碼。這些 Chaincode 可以被安裝和佈署在不同的組織中,以實作特定的業務邏輯。在本節中,我們將介紹如何安裝和佈署 Chaincode,特別是 project
和 model-version
Chaincode。
安裝 Chaincode
要安裝 Chaincode,需要使用 installChaincode.sh
指令碼。這個指令碼會將 Chaincode 安裝到指定的組織中。例如,要安裝 project
Chaincode,可以使用以下命令:
./installChaincode.sh project
安裝完成後,會顯示以下訊息:
-----------------------------------------------------
Successfully installed and deployed project chaincode
-----------------------------------------------------
Model-Version Chaincode
model-version
Chaincode 是用於儲存模型版本的 Chaincode。這個 Chaincode 需要被安裝到多個組織中,以便不同的組織可以存取模型版本的資料。例如,玄貓
組織需要存取模型版本的資料,因此需要安裝 model-version
Chaincode 到 channel c1-channel
。
要安裝 model-version
Chaincode,可以使用以下命令:
./installChaincode.sh model-version
安裝完成後,會顯示以下訊息:
-----------------------------------------------------------
Successfully installed and deployed model-version chaincode
-----------------------------------------------------------
ModelVersion 結構
ModelVersion
結構是用於儲存模型版本的資料。這個結構包括以下欄位:
Id
: 模型版本的 IDVersionName
: 模型版本的名稱LogFilePath
: 日誌檔案的路徑LogFileBCHash
: 日誌檔案的區塊鏈雜湊值
以下是 ModelVersion
結構的範例:
type ModelVersion struct {
Id string `json:"id"`
VersionName string `json:"versionName"`
LogFilePath string `json:"logFilePath"`
LogFileBCHash string `json:"logFileBCHash"`
}
這個結構可以用於儲存模型版本的資料,並且可以被用於區塊鏈系統中。
圖表翻譯:
以下是 ModelVersion
結構的 UML 圖表:
classDiagram class ModelVersion { - Id: string - VersionName: string - LogFilePath: string - LogFileBCHash: string }
這個圖表顯示了 ModelVersion
結構的欄位和其資料型別。
鏈碼模型審查(Model Review)實作
鏈碼模型審查概述
鏈碼模型審查(Model Review)是一個重要的鏈碼應用,負責管理和審查AI模型的版本和更新。這個鏈碼應用被安裝在公司管理員、利益相關者、MLOps工程師和AI工程師的組織中。鏈碼模型審查被安裝在每個成員(組織)的c1-channel頻道上,因為模型審查應該被玄貓存取。
鏈碼模型審查結構
鏈碼模型審查的結構如下:
type ModelReview struct {
NoteBookVersion string `json:"noteBookVersion"`
TestDataSetsUrl string `json:"testDataSetsUrl"`
TestDatasetBCHash string `json:"testDatasetBCHash"`
TrainDataSetsUrl string `json:"trainDataSetsUrl"`
TrainDatasetBCHash string `json:"trainDatasetBCHash"`
AIModelUrl string `json:"aiModelUrl"`
AIModelBcHash string `json:"aiModelBcHash"`
CodeVersion string `json:"codeVersion"`
CodeRepo string `json:"codeRepo"`
Comment string `json:"comment"`
VersionStatus string `json:"versionStatus"`
Status bool `json:"status"`
Project Project `json:"project"`
RecordDate string `json:"recordDate"`
EntryUser string `json:"entryUser"`
CreatorMSP string `json:"creatorMSP"`
}
鏈碼模型審查安裝
鏈碼模型審查的安裝指令碼位於 /script/installChaincode.sh
。執行以下命令來安裝鏈碼模型審查:
./installChaincode.sh
UML圖
鏈碼模型審查的UML圖如下:
classDiagram class ModelReview { - NoteBookVersion: string - TestDataSetsUrl: string - TestDatasetBCHash: string - TrainDataSetsUrl: string - TrainDatasetBCHash: string - AIModelUrl: string - AIModelBcHash: string - CodeVersion: string - CodeRepo: string - Comment: string - VersionStatus: string - Status: bool - Project: Project - RecordDate: string - EntryUser: string - CreatorMSP: string } class Project { - name: string - description: string }
圖表翻譯:
鏈碼模型審查的UML圖顯示了ModelReview類別的結構,包括其屬性和關係。ModelReview類別代表了一個AI模型的版本和更新,具有多個屬性,如NoteBookVersion、TestDataSetsUrl、TestDatasetBCHash等。Project類別代表了一個專案,具有name和description屬性。鏈碼模型審查的UML圖提供了一個清晰的視覺化表示,幫助開發人員瞭解鏈碼模型審查的結構和關係。
從技術架構視角來看,本文介紹了機器學習模型評估指標、區塊鏈例項化、Hyperledger Fabric環境設定、節點啟動與故障排除、鏈碼安裝與佈署、錨點同儕組態、UML圖表應用等關鍵技術。透過詳細的步驟說明和程式碼範例,文章完整呈現了構建根據區塊鏈的機器學習模型管理平臺的流程。然而,文章並未深入探討不同區塊鏈平臺的效能比較,也缺乏對於實際應用場景中可能遇到的挑戰和解決方案的說明。未來發展趨勢預測方面,整合更先進的機器學習模型版本控制和自動化佈署策略,並結合去中心化儲存方案,將是提升平臺效能和安全性的關鍵。對於想要構建類似平臺的團隊,建議優先關注Hyperledger Fabric的版本相容性、安全性設定以及鏈碼的效能最佳化,才能確保平臺的穩定執行和高效管理。