返回文章列表

AWS深度學習環境建置

本文提供在 AWS 上設定深度學習環境的完整,涵蓋安全群組設定、EC2 建立與管理、使用 Amazon CloudFormation 自動化佈署、S3 儲存設定與資料管理、專案目錄建立以及虛擬環境設定等關鍵步驟,並提供相關程式碼範例與說明。

雲端運算 機器學習

在 AWS 上建置深度學習環境需要整合多項服務與工具。首先,需設定 EC2 安全群組以控管例項網路存取,並可使用 CloudFormation 樣板自動化 EC2 例項的建立與組態,確保環境一致性。接著,利用 S3 儲存桶管理大量的訓練資料,並設定合適的 IAM 角色與許可權以確保資料存取安全。此外,建立結構化的專案目錄和 Python 虛擬環境,能有效管理程式碼和依賴套件,提升開發效率。

在AWS上設定深度學習環境的完整

設定安全群組規則

在建立EC2例項之前,必須先設定安全群組規則,以確保例項的安全性和連線性。安全群組充當虛擬防火牆,控制進出例項的流量。

建立安全群組

  1. 登入AWS管理控制檯,導航至VPC儀錶板。
  2. 選擇「安全群組」,然後點選「建立安全群組」。
  3. 輸入安全群組的名稱和描述,並選擇適當的VPC。
  4. 設定入站規則以允許必要的流量,例如SSH(埠22)。

設定入站規則

  • 允許SSH(埠22)從特定IP地址或CIDR區塊存取。
  • 根據需求新增其他必要的入站規則。

將安全群組與EC2例項關聯

  1. 導航至EC2儀錶板,選擇要更新的例項。
  2. 從「動作」下拉選單中,選擇「安全性」>「變更安全群組」。
  3. 選擇新建立或更新的安全群組,然後點選「指派安全群組」。

使用Amazon CloudFormation自動化EC2例項建立

Amazon CloudFormation是一種基礎設施即程式碼(IaC)服務,允許您使用簡單的文字檔案定義和提供雲端基礎設施。以下是一個範例指令碼,用於自動建立具有t2.xlarge例項型別、40 GB gp3 EBS磁碟區和允許SSH存取的安全群組的EC2例項:

AWSTemplateFormatVersion: "2010-09-09"
Description: 為深度學習任務提供t2.xlarge EC2例項和40 GB gp3 EBS磁碟區

Resources:
  DeepLearningEC2Instance:
    Type: AWS::EC2::Instance
    Properties:
      InstanceType: t2.xlarge
      KeyName: instance1keypair.pem
      SubnetId: subnet-04856bd3f80a406e6
      ImageId: ami-05134c8ef96964280
      BlockDeviceMappings:
        - DeviceName: /dev/sda1
          Ebs:
            VolumeSize: 40
            VolumeType: gp3
      SecurityGroupIds:
        - !Ref InstanceSecurityGroup

  InstanceSecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: 啟用SSH存取
      VpcId: vpc-09f1a4805e4bd7aa6
      SecurityGroupIngress:
        - IpProtocol: tcp
          FromPort: 22
          ToPort: 22
          CidrIp: 0.0.0.0/0

Outputs:
  InstanceId:
    Description: 新建立的EC2例項的例項ID
    Value: !Ref DeepLearningEC2Instance

指令碼解析

  • AWSTemplateFormatVersionDescription:指定CloudFormation範本格式版本和範本描述。
  • Resources:定義EC2例項及其相關組態。
  • DeepLearningEC2Instance:代表EC2例項本身,設定例項型別、SSH金鑰對、子網路ID、映像檔ID和儲存組態。
  • InstanceSecurityGroup:定義允許SSH存取的安全群組。

內容解密:

此指令碼用於自動建立一個具備特定組態的EC2例項,包括例項型別、儲存磁碟區和安全設定。其中,DeepLearningEC2Instance資源定義了EC2例項的屬性,如例項型別、SSH金鑰對、子網路ID和映像檔ID。InstanceSecurityGroup資源定義了安全群組的屬性,包括允許SSH存取的入站規則。指令碼中使用了CloudFormation的語法,如!Ref,用於參照其他資源的值。

管理EC2例項

啟動和停止EC2例項

  1. 登入AWS管理控制檯,導航至EC2儀錶板。
  2. 選擇要啟動或停止的例項。
  3. 從「動作」下拉選單中,選擇「例項狀態」>「啟動例項」或「停止例項」。

注意事項

  • 如果未停止例項,將會產生費用。請確保在不需要時停止例項,以避免不必要的成本。

在AWS上設定深度學習環境的完整

使用AWS CloudFormation自動化EC2例項佈署

AWS CloudFormation是一種基礎設施即程式碼(IaC)服務,能夠簡化AWS資源的建立和管理過程。以下是一個YAML格式的CloudFormation範本,用於組態一個適用於深度學習任務的EC2例項:

AWSTemplateFormatVersion: '2010-09-09'
Description: 為深度學習任務組態t2.xlarge EC2例項和40 GB gp3 EBS卷

Resources:
  DeepLearningEC2Instance:
    Type: AWS::EC2::Instance
    Properties:
      InstanceType: t2.xlarge
      KeyName: instance1keypair.pem
      SubnetId: subnet-04856bd3f80a406e6
      ImageId: ami-05134c8ef96964280
      BlockDeviceMappings:
        - DeviceName: /dev/sda1
          Ebs:
            VolumeSize: 40
            VolumeType: gp3
      SecurityGroupIds:
        - !Ref InstanceSecurityGroup

  InstanceSecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: 允許SSH存取
      VpcId: vpc-09f1a4805e4bd7aa6
      SecurityGroupIngress:
        - IpProtocol: tcp
          FromPort: 22
          ToPort: 22
          CidrIp: 0.0.0.0/0

Outputs:
  InstanceId:
    Description: 新建立的EC2例項ID
    Value: !Ref DeepLearningEC2Instance

內容解密:

  1. AWSTemplateFormatVersion:指定CloudFormation範本的版本。
  2. Resources:定義將要建立的AWS資源,包括EC2例項和安全組。
  3. DeepLearningEC2Instance:組態EC2例項的詳細資訊,如例項型別、金鑰對、子網ID和EBS卷組態。
  4. InstanceSecurityGroup:定義安全組,允許從任何IP地址進行SSH存取(不建議在生產環境中使用)。
  5. Outputs:輸出新建立的EC2例項ID,方便後續管理和自動化任務。

同樣的CloudFormation範本也可以用JSON格式編寫,兩種格式提供相同的功能和特性。

設定Amazon S3儲存

Amazon Simple Storage Service(S3)是一種高度可擴充套件的儲存服務,為儲存和存取大量資料提供了可靠且經濟高效的解決方案。以下是設定Amazon S3的步驟:

  1. 導航到S3儀錶板:登入到AWS管理控制檯,點選“服務”下拉選單並選擇“S3”。

  2. 建立儲存桶:點選“建立儲存桶”按鈕,輸入唯一的儲存桶名稱並選擇所需的AWS區域。

  3. 組態儲存桶屬性:組態儲存類別、加密設定和版本控制選項等屬性。

    • 儲存類別:根據資料的儲存需求選擇合適的儲存類別,如Standard、Intelligent-Tiering等。
    • 加密設定:啟用伺服器端加密,以加密儲存在儲存桶中的物件。
    • 版本控制:啟用版本控制,以保留儲存桶中物件的多個版本。
  4. 設定儲存桶許可權:定義儲存桶的存取控制設定,以管理誰可以存取儲存在儲存桶中的資料以及他們可以執行的操作。

    • 儲存桶策略:使用JSON語法定義儲存桶策略,以指定誰可以存取儲存桶以及他們可以執行的操作。
    • 存取控制列表(ACLs):設定ACLs,以向預定義的使用者組授予特定的許可權。

內容解密:

  • 正確組態S3儲存桶對於深度學習工作流程至關重要,因為它提供了集中式資料儲存和跨多個EC2例項和使用者分享資源的能力。
  • 正確設定儲存桶許可權對於確保資料安全性和合規性至關重要。

在AWS上設定深度學習環境的完整

使用S3儲存桶進行資料管理

在AWS上進行深度學習專案時,資料管理是至關重要的一環。Amazon S3提供了一個可擴充套件且安全的儲存解決方案,用於存放和檢索大量資料。以下是使用S3的一些關鍵步驟和最佳實踐:

設定S3儲存桶

  1. 登入AWS管理控制檯並開啟S3控制檯。
  2. 點選「建立儲存桶」並輸入儲存桶名稱。
  3. 設定儲存桶的區域和其他屬性,如版本控制和加密。

安全存取S3資料

要從EC2例項存取S3儲存桶中的資料,需要組態Identity and Access Management (IAM)角色和政策,以授予必要的許可權。以下是具體步驟:

  1. 在IAM控制檯中建立一個新的角色,選擇EC2作為使用該角色的服務。
  2. 附加必要的政策,如AmazonS3FullAccess,以授予存取S3資源的許可權。
  3. 將建立的IAM角色附加到EC2例項上。

安全地存取AWS資源

為了避免將AWS憑證硬編碼在指令碼中,可以使用以下安全替代方案:

  • IAM角色:將IAM角色附加到EC2例項,以自動提供必要的許可權。
  • 環境變數:將敏感憑證儲存在環境變數中,以便應用程式存取。
  • AWS Secrets Manager:使用AWS Secrets Manager安全地儲存和檢索憑證。

在EC2上建立專案目錄

在EC2例項上建立專案目錄有助於組織和管理工作。以下是一個Bash指令碼範例,用於建立Tesla股票預測專案的目錄結構:

%%bash
project_dir="Project Directory Structure"
mkdir -p "$project_dir"
mkdir -p "$project_dir/data"
touch "$project_dir/data/TSLA_stock.csv"
mkdir -p "$project_dir/src/pyspark_code"
touch "$project_dir/src/main.py"
touch "$project_dir/src/pyspark_code/data_preprocessing.py"
mkdir -p "$project_dir/src/pytorch_code"
touch "$project_dir/src/pytorch_code/model.py"
touch "$project_dir/src/pytorch_code/model_training.py"
mkdir -p "$project_dir/output"
mkdir -p "$project_dir/output/TSLA_stock.parquet"
touch "$project_dir/output/TSLA_stock.parquet/_SUCCESS"
touch "$project_dir/output/TSLA_stock.parquet/part-00000-2c717885-1e92-4091-b73e-c07fb2f42ba8-c000.snappy.parquet"
mkdir -p "$project_dir/output/TSLA_stock_train.parquet"
touch "$project_dir/output/TSLA_stock_train.parquet/_SUCCESS"
touch "$project_dir/output/TSLA_stock_train.parquet/part-00000-3931d223-097a-4b7f-a6df-6ddc8abfcb5c-c000.snappy.parquet"
mkdir -p "$project_dir/logs"
mkdir -p "$project_dir/tests"
touch "$project_dir/tests/test.py"
mkdir -p "$project_dir/visualizations"
touch "$project_dir/visualizations/plot.png"
touch "$project_dir/README.md"
touch "$project_dir/config.yaml"
touch "$project_dir/requirements.txt"
tree "$project_dir" --dirsfirst

內容解密:

  • %%bash:這是Jupyter筆記本中的單元格魔法命令,允許直接在程式碼單元格中執行Bash命令。
  • mkdir -p:建立目錄,如果目錄已存在則不會報錯。
  • touch:建立空檔案。
  • tree:顯示目錄結構。

這個指令碼建立了一個完整的專案目錄結構,包括資料、原始碼、輸出、記錄、測試和視覺化等子目錄,以及必要的檔案。這樣的結構有助於保持專案的組織性和可維護性。

在AWS上建立深度學習環境的基礎建設

在AWS上建立深度學習環境的第一步是設定一個結構良好的專案目錄,並建立虛擬環境以管理依賴關係和確保專案的可重現性。

建立專案目錄結構

為了保持專案的組織性和可維護性,建立一個清晰的目錄結構是非常重要的。以下是一個範例的Bash指令碼,用於建立專案目錄和必要的子目錄及檔案:

project_dir="Project Directory Structure"
mkdir -p "$project_dir"
mkdir -p "$project_dir/data"
touch "$project_dir/data/TSLA_stock.csv"
mkdir -p "$project_dir/src"
mkdir -p "$project_dir/output"
tree "$project_dir" --dirsfirst

內容解密:

  1. project_dir="Project Directory Structure":定義了一個名為project_dir的變數,並指定為"Project Directory Structure",用於指定主專案目錄的名稱。
  2. mkdir -p "$project_dir":建立主專案目錄。-p選項確保命令在需要時建立中間目錄,並且如果目錄已經存在,則不會丟擲錯誤。
  3. mkdir -p "$project_dir/data":在主專案目錄內建立一個名為"data"的子目錄。
  4. touch "$project_dir/data/TSLA_stock.csv":在"data"子目錄內建立一個名為"TSLA_stock.csv"的空檔案。在實際應用中,通常會將現有的CSV檔案上傳到Amazon S3桶中,然後使用aws s3 cp命令將其複製到EC2例項的本地目錄中。
  5. tree "$project_dir" --dirsfirst:使用tree命令生成專案目錄結構的視覺化表示。--dirsfirst選項確保目錄在輸出中優先於檔案列出。

建立虛擬環境

除了建立結構良好的專案目錄外,建立虛擬環境(如myenv)對於管理依賴關係和確保專案在不同環境中的可重現性是非常重要的。

步驟1:導航到主目錄

cd /home/ubuntu

步驟2:建立虛擬環境

python3 -m venv myenv

這條命令假設系統上已安裝Python 3。如果系統預設為Python 2.7,則需要安裝Python 3。

步驟3:啟用虛擬環境

source myenv/bin/activate

啟用虛擬環境後,命令提示符會發生變化,表明您現在正在"myenv"虛擬環境中工作。

步驟4:停用虛擬環境

deactivate

當您完成專案工作或想要切換到不同的虛擬環境或全域Python環境時,使用deactivate命令離開目前啟用的虛擬環境。

虛擬環境的結構

虛擬環境myenv包含以下標準目錄和檔案:

  • bin:包含虛擬環境的可執行檔案。啟用虛擬環境時,這些二進位檔案會被新增到您的PATH中,使得虛擬環境中的Python直譯器、pip和其他工具優先於全域工具。
  • include:包含編譯某些包含C擴充套件的Python套件所需的C頭檔案。
  • lib:包含Python標準函式庫和其他執行Python指令碼所需的分享函式庫。
  • lib64:是lib目錄的符號連結,用於與使用lib64目錄存放64位元函式庫的系統相容。
  • pyvenv.cfg:虛擬環境的組態檔案,儲存與虛擬環境相關的設定和後設資料。

這些目錄和檔案共同構成了Python虛擬環境的結構。啟用虛擬環境後,bin目錄會被新增到PATH的最前面,確保虛擬環境中的Python直譯器和其他工具被優先使用。

在AWS上建立深度學習環境的關鍵步驟

在AWS上建立深度學習環境時,虛擬環境的管理和依賴套件的安裝是至關重要的第一步。本文將詳細介紹如何安裝和組態PySpark、PyTorch、TensorFlow、Airflow等關鍵工具,以及如何驗證安裝結果。

虛擬環境與依賴管理

虛擬環境是隔離專案依賴的有效方式,但Docker提供了另一種替代方案,能夠將應用程式及其依賴封裝成容器,確保在不同環境中執行的一致性。

安裝和組態依賴

安裝PySpark

  1. 啟動虛擬環境:導航到家目錄(例如 /home/ubuntu),並啟動名為 myenv 的虛擬環境。

    cd /home/ubuntu
    source myenv/bin/activate
    
  2. 安裝PySpark:使用pip安裝PySpark。

    pip install pyspark
    

    安裝成功後會顯示已安裝的PySpark和Py4J版本,例如 py4j-0.10.9.7pyspark-3.5.1

  3. 驗證安裝:透過執行Python指令碼匯入PySpark來驗證安裝結果。

    python -c "import pyspark; print(pyspark.__version__)"
    

    此命令會輸出已安裝的PySpark版本,例如 3.5.1

安裝PyTorch

  1. 安裝PyTorch:使用pip安裝PyTorch,並可根據需求選擇是否啟用CUDA支援。

    pip install torch torchvision torchaudio
    
  2. 驗證安裝:執行Python指令碼匯入PyTorch來驗證安裝。

    python -c "import torch; print(torch.__version__)"
    

    此命令會輸出PyTorch的版本,例如 2.2.2+cu121,表明已啟用CUDA支援。

安裝TensorFlow

  1. 安裝TensorFlow和Keras:使用pip安裝TensorFlow和Keras。

    pip install tensorflow keras
    
  2. 驗證安裝:透過匯入TensorFlow和Keras來驗證安裝結果。

    python -c "import tensorflow as tf; print(tf.__version__)"
    python -c "import keras; print(keras.__version__)"
    

    輸出會顯示TensorFlow和Keras的版本,例如 2.16.13.2.1

安裝Boto3

  1. 安裝Boto3:Boto3是AWS的Python SDK,使用pip安裝。

    pip install boto3
    
  2. 驗證安裝:匯入Boto3來驗證安裝結果。

    python -c "import boto3; print(boto3.__version__)"
    

    此命令會輸出Boto3的版本,例如 1.34.84

安裝Airflow

Airflow有多種安裝方式,包括獨立安裝、根據Docker的安裝和透過Amazon Managed Workflows for Apache Airflow (MWAA)進行完全託管的安裝。

獨立安裝Airflow
  1. 啟動虛擬環境

    source /home/ubuntu/myenv/bin/activate
    
  2. 更新和安裝依賴

    sudo apt update
    sudo apt install python3-pip sqlite3 libpq-dev
    

    這裡更新了套件列表並安裝了必要的依賴,包括Python 3 pip、SQLite和PostgreSQL開發檔案。