在 AWS 建立深度學習環境需要整合多種工具,本文著重於 Airflow 的安裝與設定,包含資料函式庫的選擇與效能調校。從 SQLite 切換到 PostgreSQL,能有效提升資料函式庫在高負載環境下的穩定性與效能。同時,將 Airflow 的 Executor 從 SequentialExecutor 切換到 LocalExecutor,能利用多核心處理器提升任務平行處理能力,縮短整體執行時間。此外,文章也引導讀者設定 PostgreSQL 資料函式庫、建立 Airflow 使用者,以及更新 Airflow 設定檔以確保系統正常運作。最後,文章也簡述了 Docker 和 Docker Compose 的安裝步驟,以及如何設定 EC2 安全群組,讓外部網路能順利連線到 Airflow 和 JupyterLab。
在 AWS 上設定深度學習環境的完整:Apache Airflow 安裝與設定
步驟 3:安裝具備 PostgreSQL 支援的 Apache Airflow
要安裝具備 PostgreSQL 支援的 Apache Airflow,請執行以下指令:
pip install "apache-airflow[postgres]==2.5.0" \
--constraint \
"https://raw.githubusercontent.com/apache/airflow/constraints-2.5.0/constraints-3.7.txt"
內容解密:
- 此指令安裝指定版本的 Apache Airflow(2.5.0),並包含 PostgreSQL 支援。
--constraint引數確保安裝的依賴套件版本符合指定的 constraints 檔案,確保相容性和穩定性。
步驟 4:初始化 Airflow 資料函式庫
執行以下指令以初始化 Airflow 的中繼資料資料函式庫:
airflow db init
內容解密:
- 此指令負責初始化 Airflow 的中繼資料資料函式庫,用於儲存 DAG、Task 等相關資訊。
步驟 5:安裝和設定 PostgreSQL
執行以下指令以安裝和設定 PostgreSQL 資料函式庫:
sudo apt-get install postgresql postgresql-contrib
sudo -i -u postgres
psql
內容解密:
sudo apt-get install postgresql postgresql-contrib:安裝 PostgreSQL 資料函式庫及其附加套件。sudo -i -u postgres:切換至 PostgreSQL 使用者。psql:進入 PostgreSQL 命令列介面。
步驟 6:在 PostgreSQL shell 中建立 Airflow 資料函式庫和使用者
在 PostgreSQL shell 中執行以下指令:
CREATE DATABASE airflow;
CREATE USER your-username WITH PASSWORD 'your-password';
GRANT ALL PRIVILEGES ON DATABASE airflow TO your-username;
\q
exit
內容解密:
CREATE DATABASE airflow;:建立名為airflow的資料函式庫,用於儲存 Airflow 的中繼資料。CREATE USER your-username WITH PASSWORD 'your-password';:建立一個新的資料函式庫使用者,並設定密碼。請將your-username和your-password替換為實際的使用者和密碼。GRANT ALL PRIVILEGES ON DATABASE airflow TO your-username;:授予新建立的使用者在airflow資料函式庫上的所有許可權。\q:離開 PostgreSQL shell。exit:離開 PostgreSQL 使用者工作階段。
步驟 7:更新 Airflow 設定
進入 Airflow 設定目錄,並更新 airflow.cfg 檔案中的資料函式庫連線字串和 Executor 設定:
cd airflow
sed -i 's#sqlite:////home/ubuntu/airflow/airflow.db#postgresql+psycopg2://your-username:your-password@localhost/airflow#g' airflow.cfg
sed -i 's#SequentialExecutor#LocalExecutor#g' airflow.cfg
內容解密:
cd airflow:切換至 Airflow 設定目錄。- 第一個
sed指令將airflow.cfg中的 SQLite 連線字串替換為 PostgreSQL 連線字串,需替換your-username和your-password為實際值。 - 第二個
sed指令將 Executor 從SequentialExecutor替換為LocalExecutor,以提升任務執行的平行度。
為何從 SQLite 切換到 PostgreSQL 以及從 SequentialExecutor 切換到 LocalExecutor?
從 SQLite 切換到 PostgreSQL:
- SQLite 適合開發和測試,但在生產環境中可能無法滿足多使用者、高並發和大資料量的需求。
- PostgreSQL 是功能強大、開源的關聯式資料函式倉管理系統,具有更好的擴充套件性、可靠性和豐富的功能,能夠更好地處理並發存取和管理大規模資料集。
從 SequentialExecutor 切換到 LocalExecutor:
- SequentialExecutor 以單一程式順序執行任務,可能成為效能瓶頸。
- LocalExecutor 能夠在多個工作程式中平行執行任務,提升效能和擴充套件性,更有效地利用運算資源。
步驟 8:建立管理員使用者
執行以下指令以建立 Airflow 管理員使用者:
airflow users create -u your-username -f your-first-name -l your-last-name -r Admin -e your@mail.com
內容解密:
- 此指令建立一個新的 Airflow 使用者,並賦予管理員角色,需填入實際的使用者資訊。
為什麼需要建立管理員使用者?
建立管理員使用者對於安全管理 Airflow 至關重要。管理員可以執行管理任務,如管理連線、變數、資源池和使用者,以及存取 DAG 執行記錄和日誌。選擇強密碼並限制存取許可權,可以有效防止未授權存取,保護 Airflow 中的敏感資訊。
步驟 9:啟動 Airflow 網頁伺服器和排程器
執行以下指令以啟動 Airflow 網頁伺服器和排程器:
airflow webserver &
airflow scheduler
內容解密:
airflow webserver &:在背景啟動 Airflow 網頁伺服器,提供 UI 介面來管理和監控工作流程。透過在後台執行,即使登出終端機後,網頁 UI 仍可存取。airflow scheduler:啟動 Airflow 排程器,負責根據定義的排程(例如 cron 表示式)和任務之間的依賴關係觸發任務例項。它持續監控 DAG,以確定需要執行的任務,並根據排程和依賴關係觸發它們。
建議在不同的終端機視窗中執行這兩個指令,以便更好地監控和故障排除每個元件。使用如 tmux 或 screen 等工具,可以在登出後繼續執行這些服務。
設定Apache Airflow於AWS上的深度學習環境
Step 10:存取Airflow UI
要存取Airflow UI,請開啟網頁瀏覽器並導航至您的EC2例項的公用IP位址或網域名稱,後面接著Airflow的連線埠(預設為8080)。例如:http://<您的EC2公用IP>:8080。接著,您將被提示輸入使用者名稱和密碼。輸入您先前建立的憑證,即可登入Airflow UI。
設定連線埠8080以存取Airflow UI
要設定連線埠8080以存取Airflow UI,您需要確保EC2例項的安全群組允許連線埠8080的入站流量,並且Airflow組態為監聽連線埠8080。
EC2安全群組組態
- 前往AWS管理主控台並導航至EC2儀錶板。
- 選擇正在執行Airflow的例項。
- 在例項詳細資訊窗格底部,找到安全群組區段並點選相關聯的安全群組。
- 在安全群組設定中,點選「入站規則」標籤。
- 點選「編輯入站規則」並新增一條允許來自您的IP位址或任何地方(不建議用於生產環境)在連線埠8080上的流量的規則。
- 儲存變更。
組態Airflow監聽連線埠8080
- 透過SSH連線到您的EC2例項。
- 使用
cd命令導航至Airflow組態目錄:cd airflow - 使用文字編輯器(例如Nano)編輯
airflow.cfg檔案:nano airflow.cfg - 在組態檔案中找到
web_server_port引數並將其設定為8080:web_server_port = 8080 - 儲存變更並離開文字編輯器。
- 儲存變更後,需要重新啟動Airflow網頁伺服器以使變更生效。您可以透過停止和重新啟動Airflow網頁伺服器程式來實作這一點。
- 找到Airflow網頁伺服器的程式ID(PID):
ps aux | grep 'airflow webserver' - 使用PID終止Airflow網頁伺服器程式:
kill <PID> - 再次啟動Airflow網頁伺服器:
airflow webserver &
- 找到Airflow網頁伺服器的程式ID(PID):
Docker基礎設定
在Docker中執行Apache Airflow相較於傳統的獨立安裝提供了顯著的優勢,提供了一種流線型、一致的環境,簡化了設定、減少了組態錯誤,並增強了可移植性。Docker將Airflow及其依賴項封裝在容器內,確保了在不同系統上的可靠工作流程執行,無論是在開發、測試還是生產環境中。
Step 1:建立指令碼檔案
- 一旦透過SSH連線到您的EC2例項,首先建立一個新的shell指令碼檔案:
nano install-docker.sh - 將Docker提供的整個指令碼內容複製並貼上到此檔案中。此指令碼可在https://get.docker.com/ 上找到,並自動執行Docker安裝程式。
Step 2:使指令碼可執行
- 貼上指令碼後,按Ctrl + X,然後按Y,並輸入Enter以儲存並關閉檔案。
- 透過執行以下命令將指令碼設定為可執行:
chmod +x install-docker.sh
Step 3:以root許可權執行指令碼
- 以管理員許可權執行指令碼以安裝Docker:
sudo ./install-docker.sh - 指令碼將檢測您的Linux發行版和版本,然後相應地繼續進行Docker安裝。
Step 4:驗證Docker安裝
- 指令碼完成後,透過執行以下命令驗證Docker是否正確安裝:
docker --version - 您應該會看到在您的例項上安裝的Docker版本,確認安裝成功。
Step 5:執行測試Docker容器
- 為確保Docker正常工作,請執行一個測試Docker容器:
sudo docker run hello-world - 此命令將下載一個測試映像並執行它,如果成功,將顯示確認訊息。
#### 內容解密:
此步驟展示如何使用Docker官方提供的便利指令碼在EC2例項上安裝Docker。首先,我們建立一個shell指令碼檔案,並將Docker安裝指令碼的內容複製到其中。然後,我們使該指令碼可執行並以管理員許可權執行它。安裝完成後,我們驗證Docker是否正確安裝,並透過執行一個測試容器來確保其正常運作。
後續步驟
Step 6:安裝Docker Compose
使用以下命令下載並安裝Docker Compose:
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s | tr '[:upper:]' '[:lower:]')-$(uname -m)" -o /usr/bin/docker-compose
sudo chmod 755 /usr/bin/docker-compose
第一個命令從官方GitHub儲存函式庫下載最新的Docker Compose二進位制檔案,為您的系統選擇正確的版本並將其儲存到/usr/bin/docker-compose。第二個命令透過設定適當的許可權使Docker Compose二進位制檔案可執行。
#### 內容解密:
此步驟展示如何安裝Docker Compose。首先,我們使用curl命令從GitHub下載最新的Docker Compose二進位制檔案,並將其儲存到/usr/bin/docker-compose。然後,我們透過chmod命令使該檔案可執行。這樣,我們就成功安裝了Docker Compose。
Step 7:下載Airflow Docker Compose組態
Apache Airflow提供了一個官方的Docker Compose設定,使得執行Airflow變得容易。下載docker-compose.yaml檔案,該檔案包含在Docker容器中執行Airflow及其相關服務(如PostgreSQL和Redis)的組態:
curl -LfO 'https://airflow.apache.org/docs/apache-airflow/2.7.2/docker-compose.yaml'
#### 內容解密:
此步驟展示如何下載Apache Airflow官方提供的docker-compose.yaml檔案,該檔案定義了執行Airflow及其相關服務所需的組態。透過下載此檔案,我們可以輕鬆地在Docker容器中啟動Airflow及其依賴服務。
Step 8:準備環境
- 建立Airflow將用於DAGs、logs和plugins的目錄:
mkdir -p ./dags ./logs ./plugins - 建立一個
.env檔案以設定必要的環境變數,包括您的使用者ID和群組ID,以避免許可權問題:echo -e "AIRFLOW_UID=$(id -u)\nAIRFLOW_GID=0" > .env
#### 內容解密:
此步驟展示如何準備Airflow在Docker中執行的環境。首先,我們建立必要的目錄(dags、logs和plugins),以便Airflow能夠正確運作。然後,我們建立一個.env檔案,並在其中設定必要的環境變數,包括AIRFLOW_UID和AIRFLOW_GID,以確保Airflow在容器中具有正確的許可權。
在AWS上設定深度學習環境的關鍵步驟
在AWS上建立深度學習環境涉及多個關鍵步驟,包括設定Airflow、JupyterLab以及Databricks等工具。以下將詳細介紹這些步驟及其實作細節。
設定Airflow
Airflow是一個強大的工作流程管理工具,用於排程和管理工作流程。以下是在AWS EC2例項上設定Airflow的步驟:
- 初始化Airflow資料函式庫:使用
docker compose up airflow-init命令初始化Airflow資料函式庫。 - 啟動Airflow服務:使用
docker compose up -d命令在後台啟動Airflow服務。 - 檢查Airflow容器狀態:使用
docker compose ps命令檢查Airflow容器的狀態。 - 存取Airflow網頁介面:在瀏覽器中輸入
http://<your-ec2-public-ip>:8080存取Airflow網頁介面。
設定安全群組以允許存取Airflow
為了能夠存取Airflow網頁介面,需要在EC2例項的安全群組中開放8080埠。具體步驟如下:
- 在AWS管理控制檯中選擇相應的EC2例項。
- 編輯安全群組的入站規則,新增一條允許TCP流量透過8080埠的規則。
安裝JupyterLab
JupyterLab是一個根據網頁的互動式開發環境,支援多種程式語言。以下是安裝和設定JupyterLab的步驟:
- 安裝JupyterLab:在EC2例項上執行
pip install jupyterlab命令安裝JupyterLab。 - 生成Jupyter Notebook設定檔:執行
jupyter notebook --generate-config命令生成設定檔。 - 設定JupyterLab密碼:執行
jupyter notebook password命令設定密碼。 - 啟動JupyterLab:執行
jupyter lab --ip=0.0.0.0 --port=8888 --no-browser命令啟動JupyterLab。
設定安全群組以允許存取JupyterLab
與Airflow類別似,需要在EC2例項的安全群組中開放8888埠以允許存取JupyterLab。
設定Databricks帳戶和工作區
Databricks是一個統一的分析平台,支援大資料處理和深度學習。以下是建立Databricks帳戶和工作區的步驟:
- 註冊Databricks帳戶:存取Databricks官網註冊帳戶。
- 確認電子郵件地址:點選Databricks傳送的驗證郵件中的連結確認電子郵件地址。
- 登入Databricks:使用註冊的帳戶登入Databricks平台。
- 建立工作區:按照提示建立Databricks工作區。
從Databricks存取S3儲存桶
可以使用以下程式碼從Databricks存取S3儲存桶:
ACCESS_KEY = "your-access-key"
SECRET_KEY = "your-secret-key"
AWS_BUCKET_NAME = "your-bucket-name"
MOUNT_NAME = "/mnt/datalake-central"
dbutils.fs.mount(
source=f"s3a://{ACCESS_KEY}:{SECRET_KEY}@{AWS_BUCKET_NAME}/",
mount_point=MOUNT_NAME,
extra_configs={"fs.s3a.access.key": ACCESS_KEY, "fs.s3a.secret.key": SECRET_KEY}
)
程式碼解析
此程式碼用於將S3儲存桶掛載到Databricks檔案系統。
ACCESS_KEY和SECRET_KEY變數儲存AWS的存取金鑰和秘密金鑰,用於身份驗證。AWS_BUCKET_NAME變數儲存要掛載的S3儲存桶名稱。MOUNT_NAME變數指定掛載點,通常以/mnt/開頭,後面跟著自訂的掛載名稱。dbutils.fs.mount()函式用於掛載S3儲存桶到指定的掛載點,並傳遞必要的組態引數,如存取金鑰和秘密金鑰。