# 3/5 四籌
:::info
時間:2024/3/5
地點:線上會議(Discord)
參與:xiaojie4082、wei._.614、SmingXO、StarLeisure

:::
## 待討論事項
- 進度整理
- 下一步規劃
## 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. 儲存致資料庫
## 下一步規劃
- 網頁基礎功能建置(三周)
- 設計新的服務選單(磚塊)

- 使用者資料
- 基本資料設定
- 修課紀錄上傳
- ...
- 最新消息分類及摘要
- 須調整資料庫
- 天氣預報 icon 設定
- 公車時刻操作介面優化
- 意見回饋改為聯絡我們
- 首頁添加更多內容
- 移除帳號綁定...
- 規劃生成式 AI 實作方式及測試(一周)
- Gemma
- https://ai.google.dev/gemma?hl=zh-tw
- ChatGPT
- 免費API不能再使用
- Llama 2
- 不考慮
## 3/7 ~ 3/21
- 成功將模型在本地端運行(PyTorch)
- 使用Google 提供 colab 範例
- colab 環境與本機環境不同需要另外安裝套件
- 硬體接近瓶頸 (RTX3060)

- 運行結果

- 程式碼
```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 呼叫