iT邦幫忙

2023 iThome 鐵人賽

DAY 3
0

Sh*t things!

今天因為 EKS 裡面的 internal-ip 不足,所以要調整VPC的 Subnet 的分配,就是因為 調整網路 的原因,所以要先把 EKS destroy ,然後調整完在 rebuild 起來,真的是大工程。
幸好我平常都會使用 Terraform 的工具來把 AWS service 的部分變成程式進行管理,所以在這部分比較簡單不需要擔心會漏掉哪些資源沒開啟。 因此對 MLE 來講 請隨手養成用程式碼紀錄的習慣 真的很重要!!!

And Next ~ CI is MUST be used, not SHOULD be used

做版本控制的工具很多,這邊就舉 GitLab CI 來說明,另外 Github 我相信大家應該都聽過很多了,也大概知道怎麼用了,這裡也不是要說明怎麼使用 Git 來做版本管理工具。
但是對於版本控制而言,最主要的精髓是在 code push 之後,所觸發的 DevOps CI/CD 的部分 (Continuous Integration),同時也是在開發時不可或缺的自動化部署工具。

相信到這邊聰明的各位應該都覺得是廢話

How many kinds programs language used in Machine Learning Engineer

對一個MLE 而言,有多少種類的程式語言需要使用,就我這邊需要使用到的主要有三種

  • Terraform : 這個是因為要建立 IaC 的部分會使用。 And Why? 因為資源需要做管理,有些時候不是演算法跟增加 cpu / gpu 就可以突破的問題,包和 Memery Cache, Network Region and etc. 都需要調整,因此為了加速運算有時候需要改系統的架構,由其實對於資料量過大時,這部分就特別重要
  • TypeScript:這個使用在開發 K8s deployment 的時候使用。 And Why? 簡單來講就是把 Application container 再包裝成一個可以提供 Service 的 pod (Service 是 k8s 上的 Service) ,至於為什麼會需要變成 K8s ,其實有很多種原因,但是我們下次再講
  • Python:最後要把 Application 讓大家或者其他方 可以使用 Machine learning Model 的話就必須讓 Model 可以 serving And Why? 但是 Model 不會自己長腳來提供服務,所以時常需要直接 Refactor Application from data scientist code ,因此 Python 也是需要常常碰到的語言,

接著我使用著些 Language 之後可以幹嘛,可以產生我要的資源或者 Application 嗎?

當然不行啊!!!但能躲嗎?也不行啊,但是不同語言又不同的 compiler 或者 builder,所以要怎麼做,不能全部的程式碼都寫在同一個專案裡面吧。

還真剛好我試過,所以改起來很痛苦,雖然看或開檔案很方邊,但是常常會改錯檔案,真的是很Sh*t

Question is how to distinguish projects by target or goal

首先剛剛上面提到的三個程式語言,接下來就要考慮這三個程式語言分別是用在哪裡?要怎麼使用它?所以像 Terraform 有 init ,typescript 也有 builder,但是最後的 python 沒有 builder,那這樣怎使用的方便一些來使用跟部署

更進階一點來說 k8s 上面的設定需要使用的 AWS 的 ARN or ID 為了要取的這些 ARN or ID 的 information 帶進 k8s 裡面綁定在特定的 component 上面,所以當然可以把 Terraform 寫 Response 把 inforamtion 帶回來及可

另外我在開發Python 然後每次修改完後就 rebuild to a image,然後新的 Image 又要丟到 k8s 上面從新部署,有時候我的 Image 又需要 Mount Volumes or Expose service 的話,就把 Build Iamge 跟 k8s cdk8s 寫在一起,只要更新 image 的時候, k8s 的部分就一起改一改更新。

如果是這樣,很開心你的專案就越來越大, 你會發現,公司非要你不可,因為你把簡單的事情變成更複雜了。

為什麼我知道?因為我這樣幹過,但是會造成沒有假日可以好好出去玩,因為有問題就只有你可以解決,只能出國就好好帶筆電 standby 吧 (小秘密,嘻嘻)

因此這篇重要的就是對 MLE 而言,因為底層 Infrasturcture 到 Machine Lenaring Application 都需要碰到的狀況下,要怎麼切分專案才可以讓各個專案獨立作業呢?

Something need to figure out:

  • Terraform: 就單純顧好AWS 的資源,只要跟 AWS 有相關的就找 Terraform ,這很簡單 但是除了對於 Terraform deploy 之外,還要考量到 Destroy 的部分,因為別幻想一個 Infrastructure 的版本可以撐一年,會時常需要版本更新,所以當遇到 Upgrade 的時候就會遇到 Dependency 的問題,所以Build 跟 Destroy 都要準備
  • CDK8s : 這邊是使用 Typescript Based 的語言,他可能跟 AWS CDK(#1) 很相近,如果需要做AWS resource 的修改請使用 Terraform,而 CDK8s 的防守範圍就是 k8s components ,所以就是這麼直覺,不要想說用 k8s 來觸發 terraform 的資源,雖然會影響一些尤其是因為 EKS 的關係,所以部分 AWS service 會不自覺得長東西出來,所以要小心使用。
  • Python: 這部分就不用多說了,每個MLE 都要被荼毒,除了 Python application 之外,還有重要的難關就是要做容器化(containerized) ,這邊就會需要 docker build 等等的工具, 當然不能少一些 Multi-Threads 跟 Multi-Processing 還有 Multi-Pods 的差異了,這部分下次再講

On the contrary, for the data scientist's angle

  1. 先用 python 把 input data transform and bla bla 變成一個 executable programing ,但是要怎麼部署在 k8s 裡面,因此就要使用 docker 進行 containerized ,才算把 python application 建立完成。
  2. 完成 containerized 之後要把 Images 嘗試 depolyment 到 k8s 變成一個service,因此這部分就需要 CDK8s 來建立 service
  3. 最後個步驟就是很明確的 k8s 放在哪裡,所以有可能要提供給他人大量的存取,所以就需要ALB 或者 DynamoDB 等服務來資源後續的應用

Summary

到這邊應該越來越有感各個角色分配到的範圍了,所以不是把所有的東西都丟在一個專案裡面做就可以,CI 大家都知道怎麼使用,也知道對於開發的重要性,但是更重要的是 CI 要怎麼維護跟開發,把專案切成幾個小專案才是真正的高手,這系列後面會舉例說明。

Note:

  1. AWS CDK = Cloud Development Kit ,他是在建立AWS service 的,跟建立 k8s service 的不一樣,所以寫法也有點不一樣,這邊要小心。

上一篇
{Day 2: Talking about AWS}
下一篇
{Day 4: Gitlab CI sensitive information}
系列文
Don't be a Machine Learning Engineer30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言