K8S 遷移記錄
前言
前陣子因為太忙,一直沒空處理 Side Project 的內容
前幾天原本在跑的 LINE Bot 伺服器突然就掛掉不動了,才想起來前陣子 Heroku 免費的服務要結束了 (Reference: Heroku’s Next Chapter | Heroku),原本放在上面跑的服務瞬間成了孤兒得找個新家
剛好最近工作上有機會能接觸到 Kubernetes,就想趁這個機會把原本的服務搬到 Kubernetes 上面,而這篇文章也是紀錄一下遷移的過程
需求
首先要先了解一下原本的服務需求,這個小 side project 包含了:
Python 運行環境,用來處理 LINE Bot 和作為 API Server
Redis,其中程式會用到 Redis 來做資料的暫存
Cron Job,用來定時執行程式
Python 的部分當初就是使用 Heroku PaaS 的服務,而 Redis 當初則是使用 Redis Enterprise Cloud – Fully Managed Cloud Service | Redis
另外也有在 cron-job.org 上設定 Cron Job ...
Apple M1 Tensorflow 安裝
起源
前陣子因為舊筆電的電池續航完全崩盤,再加上零零總總的小問題,加上零零總總的小問題,因緣際會下入手了 Apple Macbook Air M1 筆電。
然而最近在訓練模型 (Tensorflow, PyTorch, XGBoost) 的時候,發現同樣的模型架構在 M1 和 Google Colab 上的運行結果卻天差地遠
(註:同樣的 Tensorflow 模型在 M1 上的結果相較 Google Colab 差上許多,但有趣的是 XGBoost 的情況卻剛好相反)。
本篇文章主要是在記錄問題觀察和解決過程。
問題觀察
猜測 1: Python 套件版本不同
剛開始懷疑是 Python 套件版本不同導致結果出現差異。
在本機端簡單列出套件版本後在 Google Colab 上執行
1!pip3 install {package}=={version}
但結果卻沒有差很多,顯然套件版本並不是本次問題的主要原因。
猜測 2: CPU 與 GPU 計算結果差異
當時也考慮過可能是 CPU 和 GPU 造成的結果差異。
在 Google Colab ...
LINE Bot FastAPI 教學
鑑於網路上目前大部分 Python LINE Bot 教學多半使用 Flask 框架作為範例,但由於 FastAPI 非同步特性的優勢,目前趨勢已經開始從 Flask 往 FastAPI 移動。
本篇文章主要面向新手教學,使用 Python FastAPI 框架為範例,帶領大家做出自己的第一個 LINE Bot。
目標
用 Python FastAPI 建立自己的第一個 echo bot (回聲機器人,Bot 接收到使用者訊息後會回傳一樣的內容給使用者)
寫完程式碼後,將程式部署至 Heroku (免費) 或 自有主機 (可參考各大 VPS 主機商費用) 上架設伺服器並運行服務
釐清 LINE Bot 中 reply 和 push 機制的差別
教學開始
Step 1. 建立 LINE Bot
進入 LINE 控制台 並輸入 LINE 帳號密碼登入
創建服務提供者
輸入提供者名稱後,點擊 Create
選擇創建 Messaging API
填入 LINE Bot 必要資訊,最後勾選同意條款,選擇 Create 創建機器人
至此,我們已經創建好了 LINE Bot,但它目 ...
BERT 筆記
Cover image source: BERT: how Google changed NLP (and how to benefit from this)
本篇文章假設已經對 Self-attention 和 Transformer 模型有基本概念,若還不熟悉可以先閱讀前篇 Self-attention & Transformer 筆記
本篇筆記是參考 台大李宏毅老師 【機器學習 2021】自督導式學習 (Self-supervised Learning) (一) – 芝麻街與進擊的巨人 、 【機器學習 2021】自督導式學習 (Self-supervised Learning) (二) – BERT 簡介 上課內容
BERT 是什麼
BERT 全名是 Bidirectional Encoder Representations from Transformers,其架構就是 Transformer 的 Encoder
訓練任務:
訓練任務分為兩種:克漏字填空 (Masking Input) 與 預測下一個句子 (Next Sentence Prediction)
克 ...
Self-attention & Transformer 筆記
筆記內容是參考 台大李宏毅老師 【機器學習 2021】自注意力機制 (Self-attention) (上) 、 【機器學習 2021】自注意力機制 (Self-attention) (下) 、 【機器學習 2021】Transformer (上) 和 【機器學習 2021】Transformer (下) 課程內容
Self-attention
為何需要 Self-attention ?
過去 CNN 是輸入單一向量 (vector),但有些情況 (ex. 語意識別、語音辨識) 輸入可能是不固定長度的向量集合 (set of vectors)
Q: One-hot Encoding 為何不適合用來處理文字?
A: 使用 One-hot Encoding 會導致各個詞彙間沒有關係,可使用 Word Embedding 方式處理
Self-attention 的輸出可以是與輸入長度相同的結果,也可以是一個 label,也可以是長度不固定的 sequence
什麼是 Self-attention ?
架構
其中 Self-attention 層是可以重複出現的,即 ...
Hexo Butterfly: 文章日曆
前言
一開始是看到網路上一位名為 ouoholly 的 教學文章,看著覺得效果不錯便也想跟著修改,不過似乎是因為 Butterfly 3.0 大改版的關係,原文章的修改方法會一直出問題。 本文章為紀錄 3.0 改版後 (當前示範版本: 3.8.1) 要如何在 Butterfly 主題中的側邊欄位上加入日曆插件。
成果圖
日曆的介面基本和 ouoholly 的內容是一樣的,感謝原文章分享!
操作步驟
1. 安裝 Hexo generator calendar
原文中的 hexo-generator-calendar 似乎沒辦法用了 (測試 Butterfly 版本: 3.8.1),上網搜尋後改使用 howiefh 的 hexo-generator-calendar
1npm install --save git://github.com/howiefh/hexo-generator-calendar.git
2. 設定 hexo-generator-calendar
於 Hexo _config.yml (root) 中添加設定
123calendar: single: true ...
更優雅的 Python Log - Loguru
前言
剛開始自學程式的時候,總想著用 print 大法一招打天下 (謎之聲:簡單方便又能用,跟 log 比起來不香嗎((誤
一直到最近幾次做有一定規模的專案時,才深刻理解到 print 的不足:很難被 traceback。 舉例而言,當用戶遇到 bug 的時候,埋 print 的情況就必須慢慢逐一檢查所有 print 的訊息,像是大海撈針一般,好不容易找到 print error 後還要再花上大半時間解 bug;相反地,若是使用 log 做記錄,我們可以快速篩選出發生的錯誤訊息,大幅降低定位 bug 所需的時間與精力,甚至是某些紀錄我們希望能被紀錄起來待日後進行其他運用,這些都是 print 所沒辦法達到的好處。
雖然 log 聽起來很好用, Python3 也有內建 logging 函式庫,但就新手的角度而言 log 是非常麻煩的作業且具有一定門檻 - handler, formatter, filter… 這讓很多人最後還是回頭用 print。 而我們今天要介紹的 Loguru 便是主打著 Python logging made (stupidly) simple 的名號,號稱簡單 ...
MongoDB 搜尋附近資料
前言
某些 APP 中會有類似 “搜尋附近景點” 的功能需求,需要在資料中搜尋位於某一座標點若干距離內的資料,將整個資料庫數據 dump 出並分別計算距離的方法並不實際且效率很差,此時我們便可以利用 MongoDB 內建的 地理位置索引 功能實現。
資料庫結構
我們的資料結構大致如圖
其中 loc 的結構為 [loc, lat]。
搜尋方法
這邊我們使用 Python 作為示範教學,搜尋座標點附近 500 公尺 內的資料。 其中 db 已於 config.py 中先完成初始化,您亦可刪除程式碼中與 config 有關的內容並在函式執行前先行初始化 db。
123456789101112131415161718192021222324252627282930313233343536373839404142import config # Self-created for initializing db. You can also ignore it and implement yours.from bson.son import SONfrom pymongo import GEOSPH ...
MongoDB - 基礎
註冊
如有私有伺服器可參考官網架設教學,這邊使用官方免費的 MongoDB Atlas 作範例
註冊 MongoDB Atlas
選擇 Shared 免費資料庫方案
選擇 資料庫位置,這邊以 Google Cloud 在台灣之伺服器作為示範
選擇完點選建立
完成註冊後等待約 3 分鐘建立 server 即可開始使用
取得連線連接
點選 CONNECT
設定連接資訊
因環境 IP 不固定,測試階段可先開啟所有 IP
選擇 Allow Access from Anywhere 接受所有連線
底下的 Username 以及 Password 自行設定後點擊 Create Database User 並點擊 Choose a connection method 按鈕
選擇 Connect your application
選擇 Python 3.6 就可以取得 Connection String 囉~
Python 操作
安裝 pymongo
12pip install pymongo[srv]# 若安裝過程出現問題,可以改使用 pip install "pym ...