Design ChatGPT

Source from : https://youtu.be/zKaHeuBjU9E

1. Clarifications

  • Ask questions to narrow the scoper of the problem.
  • If you're not familiar with the product you're being asked to design, say so and ask for details.
  • Make assumptions and check them with interviewer.

The engineering system.

1.1 Aussumptions:

  • model is there ready to use
  • chat history in DB
  • not considering the APIs
  • design something to start with and ignore advanced optimizations

User base: 500 million MAU (Monthly Active Users, 月活躍用戶)

2. Requirements & Metrics:

  • Run through the functional and non-functional requirements.
  • Estimate queries per second.
  • Be sure to practice making these kind of calculations.
  • For peak QPS, average load x 3 is about right.

2.1 Functional requirements:

  • Support users to chat with the model
  • Support conversations & chat histories
  • Accounts & payments
  • Rate limits on free accounts & GPT4 model
  • Make suere the replies are proper(non-aggressvie, good content)

2.2 Not-functional requirements:

  • scalable: 500 million MAU and growing fast.
  • HA : 24x7
  • consistency: strong consistency
    • 因為聊天對話是特定用戶和服務之間進行的, 所以一致性問題不大

2.3 Avg Load:

500 million 20 days 100 messages per day / (30243600)= 500 20 100 / 30 100000 = 52/30 = 1 millon/3 = 1000k/3 = 0.33M QPS

2.4 Peak:

0.33 * 3 = 1M QPS (three times)

3. High level design

  • Include development and management aspects in your desing whe necessary.
  • Consider which parts will be provided by the infrastructure team and make the assumption you can use them off-the-shelf
    • "Off-the-shelf" 是一個術語,用於描述可以直接從市場上購買或使用的現成產品或解決方案,而無需進行定制或自定義開發

3.1 Integrity logic

Integrity logic(完整性邏輯)是一種設計方法,旨在確保數位系統在處理和傳輸數據時能夠維護其完整性和正確性。以下是完整性邏輯的一些用途:

  1. 錯誤檢測和修復:完整性邏輯可用於檢測和修復數據傳輸或處理中的錯誤。它可以使用校驗和紅利檢查碼等技術來檢測錯誤,並使用錯誤檢測和修復方法(如重試、錯誤更正碼等)來紀錄和修復這些錯誤。
  2. 安全性保護:完整性邏輯可以用於確保數據的安全性和防範對系統的恶意攻擊。它可以包括使用數位簽名和加密等技術,以保護數據的完整性,防止未經授權的更改或篡改。
  3. 系統驗證:完整性邏輯在設計和開發階段可以用於系統的驗證和測試。通過使用完整性邏輯,可以檢查系統的操作是否符合設計要求,並確保在各種情況下數據處理的一致性和正確性。
  4. 數據一致性維護:完整性邏輯有助於維護數據的一致性,特別是在涉及多個數據源和數據操作的場景中。它可以確保數據的讀寫操作遵循特定的規則和約束,以確保數據的一致性和完整性。

3.2 Inference platform

"inference platform"(推理平台)通常指的是一個用於執行機器學習模型推理(inference)的軟體或硬體基礎設施。當訓練好一個機器學習模型後,模型需要在實際應用中進行推理,即根據輸入數據生成預測結果或輸出。

推理平台通常提供以下功能和特性:

  1. 模型部署:推理平台用於部署機器學習模型,使其能夠運行並對輸入數據進行推理。
  2. 資源管理:推理平台負責管理資源,例如處理器、內存和存儲,以確保模型推理的高效運行。
  3. 優化和加速:推理平台通常優化模型的推理性能,以提高速度和效能。這可能包括使用硬體加速器(例如GPU或TPU)或對模型進行優化和壓縮。
  4. 佈署語言支援:推理平台支援不同的程式語言和框架,以方便開發人員部署和使用他們訓練的模型。
  5. 監控和管理:推理平台通常提供監控和管理功能,用於追蹤模型的性能、運行狀態和錯誤處理。

3.3 Model Zoo

Model Zoo 的目的是提供一個集中的地方,讓用戶可以輕鬆地訪問和下載已經訓練好的模型,以便在自己的應用中使用或進行進一步的研究。這些模型通常以預訓練的形式提供,意味著它們已經在大型數據集上進行了訓練,並且具有某種程度的預測能力。使用者可以直接使用這些預訓練模型,或者在其基礎上進行微調以適應特定的任務或數據集。

4. Drill-down

  • Check in with interviewer on your hight level design before drilling down
    • 在進一步討論細節之前,與面試官確認你的整體設計或架構
  • Start a new design rather han trying to squeeze the detail into the high level diagram.
    • 在設計過程中,如果你發現高層次的圖表無法容納所有細節,就應該重新開始進行新的設計。
  • If you have brief technical problems, remain calm and keep the interviewer informed
    • 當你在面試過程中遇到一些技術問題或困難時,保持冷靜的態度並即時地將情況告知面試官。
  • Get familiar with drawing tools as part of your prep process.

4.1 chat session chain of actions

整個對話流程

如何確保系統在聊天會話中保持一致, 即使用戶長時間暫停時也是如此 ?

為了讓model知道對會中的內容是什麼, 所以在frontend combine the new question with the chat history 有cache.

4.2 Engine cluster

Data Cleaner

ChatGPT Data Cleaner(對話數據清理器)是用於處理和清理 ChatGPT 模型所使用的對話數據的工具或方法。 下面是 ChatGPT Data Cleaner 的一些用途:

  1. 數據預處理:對話數據通常需要預處理,以便將其轉換為模型可接受的格式。ChatGPT Data Cleaner 可以處理數據的格式、結構和標記,使其符合 ChatGPT 模型的要求。
  2. 數據過濾:對話數據集中可能包含噪聲、冗餘或無用的信息。ChatGPT Data Cleaner 可以檢測和刪除這些無效的對話,以確保模型訓練過程中使用的數據質量。
  3. 數據修正:對話數據中可能存在錯誤、語法問題或不連貫的內容。ChatGPT Data Cleaner 可以識別和修正這些問題,以改善對話資料的品質和一致性。
  4. 數據標記:ChatGPT Data Cleaner 可以協助對話數據的標記和標籤,例如對話分類、實體識別或情感分析等,以便進行更高層次的對話分析和處理。
  5. 數據增強:ChatGPT Data Cleaner 可以使用數據增強技術,如生成對抗網絡(GAN)或轉換算法,來生成額外的對話數據,從而增加訓練數據的多樣性和量。

ChatGPT Data Cleaner 的主要目的是改善 ChatGPT 模型所使用的對話數據的品質和可靠性,以提升模型的性能和生成結果的質量。這些清理和預處理步驟有助於確保模型在生成對話時更準確、連貫和合理。

auto-regressor

Auto Regressor(自回歸模型)是一種時間序列預測模型,它基於時間序列過去的觀測值,使用自身先前的預測結果來預測未來的值。自回歸模型假設當前時間點的觀測值與前一時間點的值存在相關性。

自回歸模型的基本概念是使用過去的觀測值建立一個回歸模型,其中自變量是過去的觀測值,因變量是當前時間點的觀測值。模型通常會使用最小二乘法或其他回歸技術來擬合回歸線,以找到最佳的參數。

根據自回歸模型的階數(order),可以有不同類型的自回歸模型,例如:

  1. AutoRegressive Model of order 1(AR(1)):只使用前一時間點的觀測值進行預測。
  2. AutoRegressive Model of order p(AR(p)):使用前 p 個時間點的觀測值進行預測。

自回歸模型在時間序列預測中廣泛應用,可以用於預測股票價格、天氣變化、經濟數據等時間相關的數據。它基於過去的觀測值對未來值進行建模,並假設時間序列具有一定的自相關性。

Model instance loaded in memory

"Model instance loaded in memory" 指的是將機器學習或深度學習模型的實例加載到計算機的內存中,以便在需要時進行快速預測或推論。這種方式可以避免每次預測都需要重新加載模型,提高預測速度和效能。

  1. 快速預測:將模型實例加載到內存中可以減少每次預測的延遲時間。模型加載一次後,預測時只需對模型進行前向計算,無需再次加載和初始化模型,從而實現快速預測。
  2. 交互式應用:對於需要即時或交互式預測的應用,將模型實例加載到內存中可以確保預測的即時性和即時響應性。這對於需要快速回答用戶查詢、處理即時數據流或交互式對話系統等場景非常重要。
  3. 批量預測:如果需要對大量數據進行批量預測,將模型實例加載到內存中可以避免每個預測之間的重複加載和初始化操作,提高整體預測效率。
  4. 部署和服務化:將模型實例加載到內存中是部署機器學習模型的常見方式之一。通過將模型實例保持在內存中,可以構建高性能的模型服務,提供預測API給其他應用或系統調用。

4.3 Bottenecks

  • Be proactive about flagging up bottlencks.
    • 對於瓶頸問題要積極主動地提前警示
  • For ChatGPT, the inference farm is the potential bottlenck area.
    • 對於ChatGPT來說,推論伺服器群可能是潛在的瓶頸區域。

Token

受限於 Token的數量, 在GPT4中大約有32,000個Token的限制, 在GPT3中有8,000個Token的限制. 由於資源限制,例如推論所需的GPU數量不足,導致載入的模型實例數量太少。除了訓練框架之外,推論伺服器將是系統中最昂貴的部分,而資源不足可能成為瓶頸。

There is a limitation in the system design due to the model, as it has a token limit of around 32,000 tokens for GPT4 8,000 for GPT3. However, for the engineering system design, there is not much that can be done about this limitation.

As for the bottlenecks of the system, I don't see any other bottlenecks because our design of the chat service and the chat GPT engine are stateless. This means that if there is a higher demand, we can simply increase the number of instances for the engine and the service, and it should handle the requests effectively.

The only reason Chat GPT would slow down is if there are too few model instances loaded due to resource limitations, such as GPUs for inference. Apart from the training framework, the inference farm would be the most expensive part of the system, and insufficient resources could become a bottleneck.

標記(token)在自然語言處理中具有多種用途,下面是一些常見的用途:

  1. 文本表示:每個標記代表文本中的一個單詞、字符或子詞。通過將文本拆分為標記序列,可以將文本轉換為機器可理解和處理的形式。
  2. 特徵提取:標記可以作為特徵用於機器學習和深度學習模型。例如,可以使用標記序列作為輸入特徵來訓練文本分類模型或情感分析模型。
  3. 語言模型訓練:標記序列用於訓練語言模型,模型通過預測下一個標記來學習文本的結構和語義。
  4. 句法分析:標記在句法分析中用於標記詞性、句法結構和依存關係。這有助於理解句子的語法結構和詞彙之間的關係。
  5. 機器翻譯:標記序列用於機器翻譯模型的訓練和生成。源語言和目標語言的標記序列之間的對應關係用於生成翻譯結果。
  6. 命名實體識別:標記用於標識文本中的命名實體,如人名、地名、組織名等。這對於信息提取和實體識別任務很重要。
  7. 文本生成:標記序列用於文本生成模型,如文本摘要、對話生成、文本補全等。模型根據標記序列生成相應的文本。

5. Bring it all together

  • Auto-regressive model, predicts on a token-by-token basis
  • An engineering system built around the AI model.
  • Anseering "Design ChatGPT" requires knowledge about machine learning and the model structure.

Q: Are you happy with this design before we wrap things up? Is there anything you would like to change or improve?

A: I believe it's a functional design to begin with. However, there are certainly many optimizations that we can explore. For example, we could potentially address the token limitation by leveraging embedding technology to compress the text and tokens. However, this topic goes beyond the scope of today's session.

Reference

  1. System design mock interview: Design Chat GPT (with Senior SWE)
  2. CS25 I Stanford Seminar - Transformers United 2023: Introduction to Transformers w/ Andrej Karpathy
© Kimi Tsai all right reserved.            Updated : 2023-07-12 09:04:53

results matching ""

    No results matching ""

    results matching ""

      No results matching ""