在人工智慧領域,模型的開發與管理至關重要。本文將深入探討如何利用區塊鏈技術構建 BTA(Business Technology Architecture)平臺,實作 AI 模型的全生命週期管理。從環境變數設定、超級管理員組態、使用者許可權管理、節點與通道組態,到模型版本控制、訓練與測試資料集管理,以及資料完整性驗證,本文提供了一套完整的實務操作。同時,文章也輔以程式碼範例,幫助讀者更好地理解和應用區塊鏈技術於 AI 模型開發與管理。

第7章:準備您的BTA

在前面的練習中,您已經設定了建立區塊鏈繫結AI所需的一切。在本章中,“練習:安裝和啟動您的BTA”詳細介紹了安裝的最後一步:設定BTA的前端和後端,並將其組態為與區塊鏈、模型和儲存桶整合。然後,您將繼續“練習:建立使用者和許可”(第207頁),在那裡您將為您的BTA建立使用者和許可。

7.1 安裝BTA後端

要設定BTA應用程式的後端(BTA伺服器),請切換到您的專案資料夾,然後克隆bta-backend儲存函式庫:

$ cd bta-backend

在檢視README.md檔案以取得任何新安裝注意事項後,執行指令碼以設定和執行BTA的後端:

$./setupAndRunBTABackend.sh

bta-backend資料夾中的檔案主要與將區塊鏈程式碼遷移到MongoDB資料函式庫有關。後端env檔案位於此處,如下一節所述。

7.2 瞭解您的BTA後端的env檔案

在/bta-backend中,您有一個名為.env的檔案,其中包含BTA使用的所有必要環境變數。當您執行setupAndRunBlockchainConnector.sh指令碼並在第6章安裝區塊鏈聯結器時,此檔案會自動複製和組態為每個組織。

檔案的第一部分與一般設定有關,如示例7-1所示。

7.2.1 示例7-1:env檔案中的埠設定

COMPOSE_PROJECT_NAME=kilroy
NODE_ENV=development
ENVIRONMENT=local

玄貓的環境設定

在開始構建我們的應用程式之前,需要設定一些環境變數。這些變數將會影響我們的應用程式如何連線到資料函式庫、哪個埠號被使用等。

環境變數設定

以下是環境變數的設定內容:

  • APP_NAME: 應用程式名稱,設定為 BTA
  • PORT: 應用程式埠號,設定為 3000
  • APP_PORT: 應用程式埠號,設定為 3340
  • APP_DEBUG_PORT: 應用程式除錯埠號,設定為 9230
  • MONGO_EXPRESS_UI_PORT: MongoDB Express UI埠號,設定為 3341
  • MAILCATCHER_PORT: Mailcatcher埠號,設定為 3342
  • DB_PORT: 資料函式庫埠號,設定為 27034

MongoDB設定

以下是MongoDB的設定內容:

  • MONGO_URI: MongoDB連線URI,設定為 mongodb://bta-db:27017
  • MONGO_HOST: MongoDB主機,設定為 bta-db
  • MONGO_USERNAME: MongoDB使用者名稱,設定為 btaapi
  • MONGO_PASSWORD: MongoDB密碼,設定為 a458CsBsaosf3KYhiNxrdF
  • DATABASE_NAME: 資料函式庫名稱,設定為 kilroy-bta-api
  • MONGO_DEBUG: MongoDB除錯模式,設定為 true

容器設定

以下是容器的設定內容:

  • APP_CONTAINER_NAME: 應用程式容器名稱,設定為 bta_api_local

內容解密:

以上的環境變數設定將會影響我們的應用程式如何運作。例如,MONGO_URI設定將會決定我們的應用程式如何連線到MongoDB資料函式庫。APP_PORT設定將會決定我們的應用程式使用哪個埠號。

import os

# 環境變數設定
APP_NAME = os.environ.get('APP_NAME', 'BTA')
PORT = int(os.environ.get('PORT', 3000))
APP_PORT = int(os.environ.get('APP_PORT', 3340))
APP_DEBUG_PORT = int(os.environ.get('APP_DEBUG_PORT', 9230))
MONGO_EXPRESS_UI_PORT = int(os.environ.get('MONGO_EXPRESS_UI_PORT', 3341))
MAILCATCHER_PORT = int(os.environ.get('MAILCATCHER_PORT', 3342))
DB_PORT = int(os.environ.get('DB_PORT', 27034))

# MongoDB設定
MONGO_URI = os.environ.get('MONGO_URI', 'mongodb://bta-db:27017')
MONGO_HOST = os.environ.get('MONGO_HOST', 'bta-db')
MONGO_USERNAME = os.environ.get('MONGO_USERNAME', 'btaapi')
MONGO_PASSWORD = os.environ.get('MONGO_PASSWORD', 'a458CsBsaosf3KYhiNxrdF')
DATABASE_NAME = os.environ.get('DATABASE_NAME', 'kilroy-bta-api')
MONGO_DEBUG = os.environ.get('MONGO_DEBUG', 'true')

# 容器設定
APP_CONTAINER_NAME = os.environ.get('APP_CONTAINER_NAME', 'bta_api_local')

圖表翻譯:

以下是環境變數設定的流程圖:

  flowchart TD
    A[環境變數設定] --> B[設定APP_NAME]
    B --> C[設定PORT]
    C --> D[設定APP_PORT]
    D --> E[設定APP_DEBUG_PORT]
    E --> F[設定MONGO_EXPRESS_UI_PORT]
    F --> G[設定MAILCATCHER_PORT]
    G --> H[設定DB_PORT]
    H --> I[設定MONGO_URI]
    I --> J[設定MONGO_HOST]
    J --> K[設定MONGO_USERNAME]
    K --> L[設定MONGO_PASSWORD]
    L --> M[設定DATABASE_NAME]
    M --> N[設定MONGO_DEBUG]
    N --> O[設定APP_CONTAINER_NAME]

玄貓的環境變數設定

在設定您的 BTA(Business Technology Architecture)環境時,需要組態多個環境變數以確保應用程式的順暢執行。以下是 玄貓 的環境變數設定,涵蓋 MongoDB、Mongo Express UI、MailCatcher、JSON Web Tokens(JWT)等重要組成部分。

容器名稱設定

首先,需要設定容器名稱以便於識別和管理。這些容器包括:

  • MONGODB_CONTAINER_NAME: MongoDB 容器的名稱,設為 bta-db
  • MONGO_EXPRESS_UI_CONTAINER_NAME: Mongo Express UI 容器的名稱,設為 mongoExpressBta
  • MAILCATCHER_CONTAINER_NAME: MailCatcher 容器的名稱,設為 mailcatcherBta

資料卷掛載

為了持久化資料,需要設定資料卷掛載:

  • DATABASE_VOLUME_MOUNT: MongoDB 資料卷掛載路徑,設為 ./psvolumes/bta-db

MailCatcher 組態

MailCatcher 是一個用於捕捉和展示傳送到特定 SMTP 伺服器的郵件的工具。相關組態包括:

  • EMAIL_HOST: MailCatcher 的主機名稱,設為 mailcatcherBta
  • EMAIL_PORT: MailCatcher 的埠號,設為 1025

JSON Web Tokens (JWT) 組態

JWT 用於安全地在 BTA 網頁應用程式和其他部分之間傳輸 JSON 格式的資訊。相關組態包括:

  • JWT_SECRET: JWT 秘密鍵,設為 YTS!QtTA69uP6nk*WG*pM6b
  • ENCRYPT_JWT_SECRET: JWT 加密秘密鍵,設為 oxRynN220cpFBiFURvtj8kz
  • JWT_EXPIRATION: JWT 過期時間,設為 30m(30 分鐘)。

其他組態

  • RESET_PASSWORD_SECRET: 重置密碼秘密鍵,設為 dYsyq9K4x9TCcRh5Cfgaberc?2yTSS@3&eM
  • SIGNUP_LIMIT: 註冊限制,設為 100
  • PAGE_VISIT_LIMIT: 頁面存取限制,設為 1000
  • RESET_WRONG_PASSWORD_BLOCK_TOKEN: 重置錯誤密碼阻止令牌,設為 dYsyq9K4x9TCcRh5CN3r@yTSS@3@eME

reCAPTCHA 組態

由於這是一個 demo,因此 Google reCAPTCHA 已經被玄貓停用。如果您想要啟用 Google reCAPTCHA,需要存取 Google reCAPTCHA 頁面並註冊一個新站點。完成註冊後,Google reCAPTCHA 會提供您的秘密鍵和 reCAPTCHA 站點鍵。

玄貓的區塊鏈應用設定

環境變數設定

在開始設定區塊鏈應用之前,需要設定環境變數。這些變數控制著應用的行為,包括重新驗證機制和區塊鏈節點連線。

重新驗證設定

  • REFRESH_TOKEN_EXPIRATION_MIN: 重新驗證token的過期時間,預設為10080分鐘(7天)。

使用者介面設定

  • CLIENT_APP_URL: 使用者介面的URL,預設值適用於示範用途。

應用日誌設定

應用日誌的設定控制著日誌檔案的輸出和傳輸方式。

  • NO_APP_LOG_T_FILE: 設定為任何字串以停用應用日誌。
  • APP_LOG_ZIPPED_ARCHIVE: 日誌檔案是否壓縮,預設為false
  • APP_LOG_DATE_PATTERN: 日誌日期格式,預設為YYYY-MM-DD
  • APP_LOG_MAX_SIZE: 單個日誌檔案的最大大小,預設為20MB。
  • APP_LOG_MAX_FILES: 保留的日誌檔案最大數量,預設為14天。

區塊鏈節點設定

區塊鏈節點的設定對於應用的正常執行至關重要。

  • BC_NODE_ORG_NAME: 區塊鏈組織名稱,應與建立超級管理員的區塊鏈節點時使用的名稱相同。
  • BC_NODE_LABEL: 區塊鏈節點的唯一標籤,預設為Peer0
  • BC_NODE_URL: 超級管理員的區塊鏈聯結器地址,預設值適用於大多數情況。
  • BC_NODE_AUTHORIZATION: 區塊鏈節點的授權設定,需要根據具體情況進行組態。

範例設定

以下是以上設定的範例:

REFRESH_TOKEN_EXPIRATION_MIN=10080
CLIENT_APP_URL="https://example.com"

NO_APP_LOG_T_FILE=""
APP_LOG_ZIPPED_ARCHIVE=False
APP_LOG_DATE_PATTERN="YYYY-MM-DD"
APP_LOG_MAX_SIZE="20m"
APP_LOG_MAX_FILES="14d"

BC_NODE_ORG_NAME="myorg"
BC_NODE_LABEL="Peer0"
BC_NODE_URL="https://example.com:7051"
BC_NODE_AUTHORIZATION="Bearer YOUR_TOKEN"

請根據您的具體需求修改這些設定,以確保您的區塊鏈應用順暢執行。

玄貓:區塊鏈超級管理員設定

在設定區塊鏈超級管理員(Super Admin)時,需要組態多個重要的環境變數。首先,我們需要設定 BC_SUPER_ADMIN_REGISTRATION_TOKEN,這是一個用於註冊超級管理員的唯一金鑰。然後,我們需要設定超級管理員的區塊鏈節點組態,包括 BC_NODE_ORG_NAMEBC_NODE_LABELBC_NODE_AUTHORIZATION

超級管理員區塊鏈節點組態

以下是超級管理員區塊鏈節點組態的範例:

BC_NODE_ORG_NAME=Peer01SuperAdminBtaKilroy
BC_NODE_LABEL=Peer01SuperAdmin
BC_NODE_AUTHORIZATION=aWNhLW8xLXN1cGVyLWFkbWluLWJ0YS1raWxyb3k6SWNhLU8xLVN1cGVyLU...

Oracle 聯結器 API 驗證

我們還需要設定 Oracle 聯結器 API 的驗證金鑰 OC_AUTHORIZATION_TOKEN。這個金鑰應該與之前計算的 AUTHORIZATION_TOKEN 相同。

OC_AUTHORIZATION_TOKEN=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

超級管理員憑證

超級管理員的憑證需要設定在環境變數中,包括 BC_SUPER_ADMIN_REGISTRATION_TOKENBC_CONNECTOR_ADMIN_ID

BC_SUPER_ADMIN_REGISTRATION_TOKEN=c3VwZItYWRtaW4tdGVzdDpzdBlci1hZG1pbi10ZN0LWtleQ==
BC_CONNECTOR_ADMIN_ID=08db14a176cd3dd43e9220f53a62635ba0502e3a7d1f894e90316ab558330

環境變數檔案

前端應用程式的環境變數檔案 environment.ts 包含了專案所需的環境變數。這個檔案會自動組態好環境變數。

export const environment = {
  project: 'bta',
  disableCaptcha: true,
  recaptchaSiteKey: 'xxxxxxxxxxxxxxxxxxxxxxx'
};

啟動前端應用程式

要啟動前端應用程式,需要克隆 bta-frontend 倉函式庫並執行 setupAndRunBTAFrontend.sh 指令碼。

$ cd bta-frontend
$ ./setupAndRunBTAFrontend.sh

圖表翻譯:

  graph LR
    A[設定超級管理員] --> B[組態環境變數]
    B --> C[設定區塊鏈節點]
    C --> D[設定 Oracle 聯結器 API 驗證]
    D --> E[設定超級管理員憑證]
    E --> F[啟動前端應用程式]

內容解密:

以上步驟是設定區塊鏈超級管理員的過程,包括組態環境變數、設定區塊鏈節點、設定 Oracle 聯結器 API 驗證和設定超級管理員憑證。最後,需要啟動前端應用程式。每一步驟都需要小心組態,以確保區塊鏈超級管理員的安全性和正常運作。

使用BTA平臺進行使用者和許可權管理

在BTA平臺中,管理使用者和許可權是一個重要的功能。為了完成這個功能,需要進行以下步驟:

建立使用者和許可權

首先,需要建立使用者和許可權。這可以透過BTA平臺的使用者管理功能完成。需要建立的使用者包括超級管理員、組織管理員、AI工程師、MLOps工程師和利益相關者。

組態組織管理員的節點

組織管理員需要組態自己的節點資訊。這可以透過BTA平臺的BC組態功能完成。需要組態的節點資訊包括組織名稱、授權令牌、標籤等。

組態頻道

需要組態頻道資訊。這可以透過BTA平臺的BC組態功能完成。需要組態的頻道資訊包括頻道名稱、標籤等。

驗證訂閱

需要驗證訂閱資訊。這可以透過BTA平臺的使用者管理功能完成。需要驗證的訂閱資訊包括BC節點資訊、頻道資訊等。

啟用組織管理員

啟用組織管理員需要進行以下步驟:

  1. 登入BTA平臺的使用者管理功能。
  2. 找到組織管理員的使用者資訊。
  3. 點選啟用按鈕。

組態AI團隊的存取許可權

組態AI團隊的存取許可權需要進行以下步驟:

  1. 登入BTA平臺的使用者管理功能。
  2. 找到AI團隊的使用者資訊。
  3. 組態存取許可權。

以下是相關的程式碼示例:

# 建立使用者和許可權
from bta_user import create_user
from bta_permission import create_permission

# 組態組織管理員的節點
from bta_bc import configure_bc_node

# 組態頻道
from bta_bc import configure_channel

# 驗證訂閱
from bta_user import verify_subscription

# 啟用組織管理員
from bta_user import enable_user

# 組態AI團隊的存取許可權
from bta_permission import configure_permission

內容解密:

上述程式碼示例展示瞭如何使用BTA平臺的API進行使用者和許可權管理。需要注意的是,實際的程式碼可能會更加複雜,需要根據具體的需求進行修改。

圖表翻譯:

以下是相關的Mermaid圖表:

  graph LR
    A[建立使用者和許可權] --> B[組態組織管理員的節點]
    B --> C[組態頻道]
    C --> D[驗證訂閱]
    D --> E[啟用組織管理員]
    E --> F[組態AI團隊的存取許可權]

這個圖表展示了使用者和許可權管理的流程,包括建立使用者和許可權、組態組織管理員的節點、組態頻道、驗證訂閱、啟用組織管理員和組態AI團隊的存取許可權。

使用區塊鏈技術組態使用者節點和通道

在開始組態使用者節點和通道之前,組織管理員需要使用 BTA 介面組態區塊鏈節點和通道,以便所有使用者可以建立、審核和完成 AI 模型。這個過程需要新增使用者的區塊鏈節點到 BTA、新增通道、建立組織單位和人員組態以控制存取許可權,並建立登入憑證。

組態使用者節點

首先,組織管理員需要組態每個使用者的節點。這可以透過點選 “BC 組態” > “BC 節點資訊” 來完成。然後,點選 “新增 BC 節點” 並完成以下資訊:

  • 組織名稱:Peer05AIEngineerBtaKilroy
  • 授權令牌:aWNhLW8yLWFkbWluLWJ0YS1raWxyb3k6SWNhLU8yLUFkbWluLUJ0YS1LaWxyb3k=
  • 標籤:AI 工程師

點選 “儲存” 以傳回 BC 節點資訊螢幕。您將看到一個彈出訊息,表示您的 BC 節點資訊已經新增成功,並且您將看到新的 BC 節點在列表中。

組態通道

接下來,組織管理員需要組態一個通道,以便所有使用者可以跨節點進行通訊。這可以透過點選 “BC 組態” > “通道詳細資訊” 來完成。建立一個名為 “o5-ai-engineer-channel” 的通道,標籤為 “o5 通道”。您只需要做這一次。點選 “儲存” 以檢視您的新通道在列表中。

建立組織單位

組織管理員需要設定存取控制,以組織單位的形式控制整個組織,並在其中建立人員組態以控制使用者的存取許可權。組織單位控制著分配給使用者的功能。

點選 “管理使用者” > “組織單位” 來建立組織單位。點選 “新增組織單位” 按鈕,然後完成以下欄位:

  • 單位名稱:AI 組織
  • 描述:測試組織單位

完成 “功能” 部分的表單,選擇 “個人詳細資訊”、“組織詳細資訊”、“專案”、“專案目的”、“模型版本”、“模型審核” 和 “模型監控”,然後點選 “儲存”。

組態人員組態

組織單位過濾其下的人員組態,因此如果您不選擇一個功能,您將無法為該功能分配建立-讀取-寫入許可權。

完成這些步驟並儲存您的組織單位後,您可以在列表中檢視它。當您組態使用者使用新的組織單位時,當他們登入時,他們只會看到您在建立組織單位時選擇的功能。但是在您可以將組織單位分配給使用者之前,您必須在其中建立人員組態。

建立人員組態

在建立組織單位後,作為組織管理員,您需要為三種型別的參與者建立三個人員組態:AI 工程師、MLOps 工程師和利益相關者。您可以在動作欄下方找到一個「+」按鈕,該按鈕會彈出一個新增組織人員組態的對話方塊,適用於您在上一步建立的組織單位。使用表 7-1 中的資訊為每個人員組態填寫相關屬性。

表 7-1:每個參與者角色的人員組態屬性

屬性AI 工程師MLOps 工程師利益相關者
人員組態型別AI 工程師MLOps 工程師利益相關者
人員組態名稱AI 工程師名稱MLOps 工程師名稱利益相關者名稱
Oracle 群組名稱ai-engineer-1mlops-engineer-1stakeholder-1
BC 節點資訊Peer05AIEngineerBtaKilroyPeer04MLOPsBtaKilroyPeer03ShBtaKilroy
Oracle 儲存桶 URL使用者的 OCI 儲存桶使用者的 OCI 儲存桶使用者的 OCI 儲存桶

將儲存桶 URL 指派給人員組態

要將儲存桶指派給人員組態,請將儲存桶的 URL 新增到人員組態中。複製您之前儲存的預驗證請求,並將其貼上到 Oracle 儲存桶 URL 欄位中。

設定功能存取級別

完成人員組態型別、人員組態名稱、Oracle 群組名稱、BC 節點資訊、選擇通道詳細資訊和 Oracle 儲存桶 URL 欄位後,請向下滾動以設定功能存取級別。根據功能,您將在功能名稱右側看到 R、W 和 U,它們分別代表讀取、寫入和更新。這些控制使用者對每個功能的資料存取級別。選擇「讀取」允許使用者顯示功能的資料,但不能修改它;選擇「寫入」允許使用者使用功能建立新記錄;選擇「更新」允許使用者修改由功能生成的現有記錄的內容。

重複此過程

重複此過程為 MLOps 工程師和利益相關者建立人員組態。完成後,您的人員組態列表將類似於圖 7-16 中所示。

圖表翻譯:

  graph LR
    A[建立組織單位] --> B[建立人員組態]
    B --> C[設定功能存取級別]
    C --> D[完成人員組態]
    D --> E[重複過程]
    E --> F[完成所有人員組態]

使用區塊鏈技術的AI模型開發流程

在本章中,我們將探討如何使用區塊鏈技術來開發和管理AI模型。首先,我們需要建立一個新的專案,並新增一個版本。然後,我們需要上傳訓練和測試資料到區塊鏈上,並計算雜湊值以確保資料的完整性。

建立新的專案

為了建立一個新的專案,我們需要選擇「管理專案」>「專案」,然後點選「新增專案」按鈕。這將彈出一個視窗,讓我們輸入專案名稱和成員。例如,我們可以建立一個名為「交通標誌檢測」的專案,並新增AI工程師、MLOps工程師和利益相關者為成員。

新增新的版本

新增新的版本時,我們需要選擇「新增版本」按鈕,然後輸入版本名稱和其他相關資訊。例如,我們可以新增一個名為「1」的版本,並輸入相關的訓練和測試資料集的URL。

上傳訓練和測試資料

上傳訓練和測試資料時,我們需要使用區塊鏈技術來計算雜湊值,以確保資料的完整性。這可以透過區塊鏈的自動化計算和儲存雜湊值的功能來實作。

計算雜湊值

計算雜湊值時,我們需要使用區塊鏈技術來計算上傳資料的雜湊值。這可以透過區塊鏈的自動化計算和儲存雜湊值的功能來實作。

版本詳細資訊

版本詳細資訊中,我們可以看到版本名稱、訓練和測試資料集的URL,以及雜湊值等資訊。這些資訊可以幫助我們跟蹤和管理AI模型的開發和佈署過程。

圖表翻譯:

此圖表展示了使用區塊鏈技術開發和管理AI模型的流程。從建立新的專案開始,然後新增新的版本,接著上傳訓練和測試資料,然後計算雜湊值,最後檢視版本詳細資訊。這個流程可以幫助我們確保AI模型的完整性和安全性。

第8章:使用您的BTA

8.1 新增訓練資料集和測試資料集到儲存桶

當使用者建立模型版本時,訓練資料集和測試資料集會根據自動生成的URL從Oracle雲端中提取。這些資料集被新增到儲存桶中,以便於後續的模型訓練和測試。

從技術架構視角來看,搭建根據區塊鏈的AI模型訓練平臺(BTA)涉及前端、後端、區塊鏈、模型和儲存桶等多個模組的整合。本章節著重介紹了BTA後端佈署、環境變陣列態、使用者許可權管理以及資料集上傳等關鍵步驟。其中,環境變數的組態是確保系統各模組協同運作的基本,涵蓋了資料函式庫連線、埠號設定、JWT 權杖管理、區塊鏈節點資訊等核心引數。透過詳細的步驟說明和程式碼範例,讀者可以逐步完成BTA平臺的搭建和組態。然而,目前檔案缺乏對不同環境變數設定的安全性考量以及潛在風險的說明,例如JWT_SECRETENCRYPT_JWT_SECRET的安全性強度以及儲存方式。此外,對於不同規模的AI模型訓練需求,如何調整和最佳化這些環境變數以提升系統效能和穩定性,也需要進一步探討。展望未來,隨著AI模型訓練資料量的增長和複雜度的提升,BTA平臺需要更彈性、更安全的架構設計。預計未來BTA平臺將整合更進階的區塊鏈技術,例如零知識證明和聯邦學習,以提升資料隱私和安全性,並支援更大規模的協作式AI模型訓練。對於企業而言,及早規劃和佈署BTA平臺,將有助於提升AI模型開發效率,並在未來的AI應用競爭中取得先機。建議技術團隊深入研究區塊鏈技術的安全性和效能最佳化策略,並結合自身業務需求制定合理的BTA平臺佈署方案。