# 3/5 四籌 :::info 時間:2024/3/5 地點:線上會議(Discord) 參與:xiaojie4082、wei._.614、SmingXO、StarLeisure ![image](https://hackmd.io/_uploads/S1IPfONaa.png) ::: ## 待討論事項 - 進度整理 - 下一步規劃 ## 2/23~3/1 進度整理 - 將原本登入註冊功能移除,改由Discord第三方登入。 - https://puhub.org/mod/login.php?action=login - 增加網頁與discord使用者資料同步 - 無法確定是否為學校學生(需 email 認證 - 整理修課資料取得方式 - 使用者提供帳號密碼授權網站爬取 學分試算表-課程架構明細 - 個資問題... - 串接計中系統 - 幾乎沒有可能...[是否可嘗試爭取?](https://hackmd.io/@NKUSTSP/SJo1ciugj) - 學校目前沒有提供相關開放的API(如:[正修科技大學]()、[臺灣師範大學](https://www.itc.ntnu.edu.tw/index.php/data_access/)、[陽明交通大學](https://id.nycu.edu.tw/docs/) - 使用者至 學分試算表-課程架構明細 將網頁列印成 pdf,透過提取pdf取得修課資料 - 可行性中 - 修課狀態是圖示不是文字無法擷取 - 使用 ORC 可能還是會有錯誤 - 使用者提供 Cookie,爬取學分試算表-課程架構明細 - 可行性高 - 使用者操作較麻煩 - 操作方式: 1. 使用者登入e校園服務物網 2. 將 java+script: document.write(document.cookie) 貼到網址欄 3. 將 cookie 貼到網站上 4. 透過 PHPSESSID= 爬取學分試算表-課程架構明細資料(e校園服務網在爬取時不能登出不然cookie會失效) 5. 儲存致資料庫 ## 下一步規劃 - 網頁基礎功能建置(三周) - 設計新的服務選單(磚塊) ![image](https://hackmd.io/_uploads/BJzSJuETT.png) - 使用者資料 - 基本資料設定 - 修課紀錄上傳 - ... - 最新消息分類及摘要 - 須調整資料庫 - 天氣預報 icon 設定 - 公車時刻操作介面優化 - 意見回饋改為聯絡我們 - 首頁添加更多內容 - 移除帳號綁定... - 規劃生成式 AI 實作方式及測試(一周) - Gemma - https://ai.google.dev/gemma?hl=zh-tw - ChatGPT - 免費API不能再使用 - Llama 2 - 不考慮 ## 3/7 ~ 3/21 - 成功將模型在本地端運行(PyTorch) - 使用Google 提供 colab 範例 - colab 環境與本機環境不同需要另外安裝套件 - 硬體接近瓶頸 (RTX3060) ![image](https://hackmd.io/_uploads/B1MsUVKA6.png) - 運行結果 ![image](https://hackmd.io/_uploads/ryr1P4FC6.png) - 程式碼 ```py import kagglehub kagglehub.login() ``` ```py # Choose variant and machine type VARIANT = '2b-it' MACHINE_TYPE = 'cuda' ``` ```py import os # Load model weights weights_dir = kagglehub.model_download(f'google/gemma/pyTorch/{VARIANT}') # Ensure that the tokenizer is present tokenizer_path = os.path.join(weights_dir, 'tokenizer.model') assert os.path.isfile(tokenizer_path), 'Tokenizer not found!' # Ensure that the checkpoint is present ckpt_path = os.path.join(weights_dir, f'gemma-{VARIANT}.ckpt') assert os.path.isfile(ckpt_path), 'PyTorch checkpoint not found!' ``` ```py import sys sys.path.append('gemma_pytorch') ``` ```py from gemma_pytorch.gemma.config import get_config_for_7b, get_config_for_2b from gemma_pytorch.gemma.model import GemmaForCausalLM ``` ```py import torch print(torch.__version__) print(torch.cuda.is_available()) ``` > 2.2.1+cu121 > True ```py import torch # Set up model config. model_config = get_config_for_2b() if "2b" in VARIANT else get_config_for_7b() model_config.tokenizer = tokenizer_path model_config.quant = 'quant' in VARIANT # Instantiate the model and load the weights. torch.set_default_dtype(model_config.get_dtype()) device = torch.device(MACHINE_TYPE) model = GemmaForCausalLM(model_config) model.load_weights(ckpt_path) model = model.to(device).eval() ``` ```py # Generate with one request in chat mode # # Chat templates # USER_CHAT_TEMPLATE = '<start_of_turn>user\n{prompt}<end_of_turn>\n' # MODEL_CHAT_TEMPLATE = '<start_of_turn>model\n{prompt}<end_of_turn>\n' # # Sample formatted prompt # prompt = ( # USER_CHAT_TEMPLATE.format( # prompt='What is a good place for travel in the US?' # ) # + MODEL_CHAT_TEMPLATE.format(prompt='California.') # + USER_CHAT_TEMPLATE.format(prompt='What can I do in California?') # + '<start_of_turn>model\n' # ) # print('Chat prompt:\n', prompt) # model.generate( # USER_CHAT_TEMPLATE.format(prompt=prompt), # device=device, # output_len=100, # ) ``` ```py # Generate def Generate(text): message = model.generate( text, device=device, output_len=200, ) return message ``` ```py mes = input() print(Generate(mes)) ``` > 作為一個語言模型,我專注於自動產生語言並對各種主題進行學習。我的訓練資料涵蓋了大量的文本資料,包括各種語言和文化。 > > 我是一個不可或缺的工具,可以幫助你探索更多可能性並了解各種主題。 - 使用 LoRA 微調模型(Keras) - 資料集 - https://huggingface.co/datasets - 想辦法快速生成 datasets - 透過 生成式AI 產生,餵大量資料給模型產生 .csv 檔 - 自己製作資料集(耗時,且未來資料集更新麻煩) - 或是20%自己做,80%由模型生成 - 微調模型 - 在 colab 有測試微調模型(使用 huggingface 上的資料集) - https://colab.research.google.com/github/google/generative-ai-docs/blob/main/site/en/gemma/docs/lora_tuning.ipynb - 在本地端執行狀況 - Keras Keras-nlp 套件安裝有問題 - colab 上已有部分檔案因此沒辦法直接使用 colab 範例 - 直接在本地端透過 Python 製作成 api - Flask - 網頁和Discord bot 都使用 api 呼叫