在機器學習專案中,評估模型的效能至關重要。常用的指標包含精確度、損失和 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模組,位於應用層,負責連線到特定的區塊鏈節點。要啟動區塊鏈平臺,需要建立頻道、加入頻道、設定錨點同儕,並安裝和佈署鏈碼。

建立頻道

頻道是區塊鏈網路中不同成員之間的私密和保密通訊方式。建立頻道步驟如下:

  1. 建立全球頻道(global-channel):這是預設的頻道,供超級管理員使用。
  2. 建立公司頻道(c1-channel):這是公司頻道,供公司相關使用者使用。
  3. 建立AI工程師頻道(o5-ai-engineer-channel):這是AI工程師的私人頻道,供AI工程師分享私人資料。

加入頻道

不同組織的節點需要加入相應的頻道。以下是加入頻道的步驟:

  1. 執行指令碼./createChannel.sh建立頻道。
  2. 執行指令碼./joinChannels.sh加入頻道。

鏈碼安裝和佈署

鏈碼是區塊鏈平臺的智慧合約。要安裝和佈署鏈碼,需要執行以下步驟:

  1. 安裝鏈碼:使用./installChaincode.sh指令碼安裝鏈碼。
  2. 佈署鏈碼:使用./deployChaincode.sh指令碼佈署鏈碼。

節點管理

節點是區塊鏈平臺的基本單位。要管理節點,需要執行以下步驟:

  1. 啟動節點:使用docker ps命令檢視正在執行的節點。
  2. 停止節點:使用./stopAndRemoveNodes指令碼停止節點。

模型版本管理

模型版本是AI工程師建立的私人資料。要管理模型版本,需要執行以下步驟:

  1. 建立模型版本:AI工程師建立模型版本並提交到公司頻道。
  2. 提交模型版本:AI工程師提交模型版本到公司頻道。
  3. 存取模型版本:其他使用者可以存取提交的模型版本。
圖表翻譯:

此圖表示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,特別是 projectmodel-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: 模型版本的 ID
  • VersionName: 模型版本的名稱
  • 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的版本相容性、安全性設定以及鏈碼的效能最佳化,才能確保平臺的穩定執行和高效管理。