• <xmp id="om0om">
  • <table id="om0om"><noscript id="om0om"></noscript></table>
  • 3 月 19 日下午 2 點,鎖定 NVIDIA AI 網絡中文專場。立即注冊觀看
    數據中心/云端

    用于高性能計算中代碼開發的高級人工智能和檢索增強生成

    在快速發展的軟件開發領域,聊天機器人和 GitHub Copilot 極大地改變了開發人員編寫和管理代碼的方式。這些工具建立在 大型語言模型(LLM)基礎上,通過自動化日常編碼任務來提高生產力。

    并行計算挑戰

    然而,LLM 在生成并行計算代碼中的使用對于 高性能計算(HPC)應用程序遇到了挑戰。 并行計算應用程序需要對功能編程的邏輯和管理多個并發操作(如避免死鎖和競爭條件)所涉及的復雜性有細致的理解。傳統的人工智能模型可以有效地生成串行代碼,但由于這些增加的復雜性,生成并行結構的代碼變得困難。

    NVIDIA 也面臨著生成復雜代碼的挑戰,以支持新型加速計算半導體的設計。為了解決這一問題,高度相關的工作 ChipNeMo 于 2023 年超級計算期間發表,成功地應用了 域自適應預訓練(DAPT)和 檢索增強生成(RAG)技術,為工程師提供了 EDA 副駕駛。DAPT 與先進的 RAG 技術的結合很好地解決了桑迪亞科學家面臨的問題,并啟動了以下合作。

    一個科學家團隊來自 桑迪亞國家實驗室,他們啟動了一個雄心勃勃的項目,基于 NVIDIA NeMo 軟件產品,如早期訪問 nResolve-40K(嵌入模型),以解決這些挑戰。他們開發了一個專門的編碼助理 Kokkos,一個 C++ 庫,它為您提供了編寫性能可移植應用程序的工具。該庫抽象了硬件復雜性,并使代碼能夠在不同類型的高性能計算(HPC)架構上高效運行。

    為這樣一個特定的任務創建人工智能模型通常需要使用特定領域的知識對基礎模型進行微調,這是一個資源密集且耗時的過程。為了在軟件更新和錯誤修復方面保持敏捷,HPC 開發人員通常更喜歡更靈活的方法。

    該助手旨在利用最新的人工智能進步,提供準確、上下文感知的代碼建議,為您提供支持。

    實施先進的 RAG

    Sandia 正在與 NVIDIA 合作開發一種先進的 RAG 方法,以實現模塊化工作流程,該工作流程可適應正在進行的數據集更改,并在最先進的模型發布后立即將其與 HPC 工作負載集成。

    根據桑迪亞極限規模計算高級經理 Robert Hoekstra,博士的觀點,包括桑迪亞在內的多個行業的組織正在通過 NVIDIA 生成人工智能來解鎖有價值的見解,實現對其企業數據的語義搜索。桑迪亞和 NVIDIA 正在合作評估新興的生成人工智能工具,以最大限度地提高數據洞察力,同時提高準確性和性能。

    桑迪亞的科學家通過使用 Kokkos 編譯,創建了一個動態且不斷更新的數據集。借助 C 編程的遞歸文本分割器,可以將數據集組織成可管理的塊。接著,這些數據集塊被轉換為矢量嵌入并存儲在數據庫中,從而產生了一種比微調更不耗費資源的過程。

    當進行查詢時,它被轉換為一個向量,該向量根據余弦相似性從數據庫中檢索相關的代碼塊。然后,這些塊用于提供生成響應的上下文,創建包含真實世界編碼模式和解決方案的豐富、知情的輸出。

    Flowchart starts with the user query, expanded to include context from the LLM user history. Five similar queries are re-written to query the LLM. All queries are fed into the embedding model, which returns the top k documents for each.  Custom data is chunked and fed to an embedding model, which generates a float vector. Float vectors are stored as vector store embeddings and determine semantic similarity. Output is re-ranked against the query and the top 6 documents are retrieved. This relevant text is context to the LLM along with the rewritten query for final output.
    圖 1。用于用戶查詢的 RAG 技術

    RAG 評估

    在 Sandia 對 naive RAG 的初步評估中,使用了包括 BLEU、ChrF、METEOR 和 ROUGE-L 在內的各種指標,根據 Sandia Kokkos 開發人員提供的標準基準來評估生成代碼的有效性。令人鼓舞的是,初步結果顯示,隨著 RAG 方法的實施,標度平均值評估增加了 3-4 個點。

    Scaled mean = [100(BLEU+RougeL+CodeBLEU+METEOR)+ChrF]\slash5

    嵌入模型 LLM
    BGE–大型–EN–V 1.5 無效–7B–指令–V0.2
    E5–底座–V2。 MIXTRAL–8X7V–指令–V 0.1
    NVolve40K WIZARDCODER–15B–V1.0
    UAE–大–V1 魔術師–S–DS–6.7 B。
    表 1。測試嵌入模型和開源 LLM
    模型 OSS 標度平均值 RAG 標度平均值
    mistralai-MIstral-7B-Instruction-v0.2 18.75 22.59
    mistralai-Mixtral-8x7B-儀器-v0.1 23.68 23.85
    WizardLM_WizardCoder-15B-V1.0 25.01 28.61
    ise-uiuc_MagicCoder-S-DS-6.7B 25.90 28.96
    表 2。開源軟件嵌入模型和 LLM 的基準測試

    模塊化 HPC 工作流的 RAG 結果

    通過天真的 RAG 管道實施,實現了微小的性能改進。Mixtral 模型(MoE 架構)沒有受到附加 Kokkos 上下文的顯著影響。

    沒有找到優越的嵌入模型。相反,嵌入模型和 LLM 的特定配對提供了最佳結果。

    用于多查詢檢索的 RAG

    桑迪亞團隊還試驗了先進的 RAG 技術,以改進如何檢索相關內容。

    其中一種技術涉及生成多個相關查詢,以擴大對適用代碼片段的搜索范圍,尤其是當用戶查詢模糊或缺乏特定細節時。這種方法提高了檢索更相關上下文的可能性,增強了生成代碼的準確性和有用性。

    The chart compares the Naive RAG c1024_o256 with several MultiQueryRetrievers - MQ_c1024_o256 chunk size 1024 and chunk overlap 256’ MQ_c500_o100 chunk size 500 and chunk overlap 100; and MQ_c300_050 chunk size 300 and chunk overlap 50.  The comparisons are for the metrics BLEU, ChrF, CodeBLEU, METEOR, ROUGE-L, and the scale mean. The mid-size code snippet MQ_c500_o100 was scored most consistently better (a few percentage points) for enhanced accuracy and usefulness than the other retrieval methods.
    圖 2:將多查詢檢索應用于中型代碼示例

    以下示例顯示了一個查詢以及由多查詢檢索器創建的生成查詢。

    Prompt: Create a Kokkos view of doubles with size 10 x 3
     
    Generated Queries:
     
    1. How can I create a Kokkos view of doubles with size 10 x 3?
    2. How can I create a Kokkos view of doubles with size 10 x 3 and initialize it with random values?
    3. How can I create a Kokkos view of doubles with size 10 x 3 and initialize it with values from a file?

    豐富數據集上下文

    桑迪亞的研究人員也在探索母文檔檢索器的方法。在這種方法中,數據被分割成提供一般上下文的大的父塊和專注于特定細節的小的子塊。

    這一策略有助于平衡對具體性和廣度的需求,優化檢索信息的相關性和全面性。

    The chart compares the naive RAG c1024_o256 with the ParentDocumentRetrievers PD_parent-c1000_o200_child-c300-o0 with parent chunk size 1000 parent chunk overlap 200 child chunk size 300 child overlap 0; PD_parent-c500_o100_child-c200-o0 with parent chunk size 500 parent chunk overlap 100 child chunk size 200 child overlap 0; and PD_parent-c300_o75_child-c150-o0 with parent chunk size 300 parent chunk overlap 75 child chunk size 150 child overlap 0.  The comparisons are for the metrics BLEU, ChrF, CodeBLEU, METEOR, ROUGE-L and the scale mean. The approaches for context enrichment that splits datasets into both parent and child chunks, especially the smallest sizes, yielded the most substantial improvements on Kokkos.
    圖 3。將數據集拆分為父數據塊和子數據塊

    下面的提示示例顯示了用于搜索數據庫的子塊和父塊。

    Prompt: Create a Kokkos view of doubles with size 10 x 3
     
    Child Chunk:
    // Create the Kokkos::View X_lcl.
    const size_t numLclRows = 10;
    const size_t numVecs = 3;
    typename dual_view_type::t_dev X_lcl ("X_lcl", numLclRows, numVecs);
     
     
    Parent Chunk:
    // Create the Kokkos::View X_lcl.
    const size_t numLclRows = 10;
    const size_t numVecs = 3;
    typename dual_view_type::t_dev X_lcl ("X_lcl", numLclRows, numVecs);
     
    // Modify the Kokkos::View's data.
    Kokkos::deep_copy (X_lcl, ONE);
     
    {
    lclSuccess = success ? 1 : 0;
    gblSuccess = 0; // output argument
    reduceAll<int, int=""> (*comm, REDUCE_MIN, lclSuccess, outArg (gblSuccess));
    TEST_EQUALITY_CONST(gblSuccess, 1);
    if (gblSuccess != 1) {
    return;
    }
    std::ostringstream os;
    os << "Proc " << comm->getRank () << ": checkpoint 1" << std::endl;
    std::cerr << os.str ();
    }
    </int,>

    HPC 結果的高級人工智能

    Sandia 團隊的初步評估使用了標準的 NLP 指標,如 BLEU(雙語評估研究)和 ROUGE(面向回憶的 Gisting 評估研究)。

    然而,他們認識到需要一個更適合代碼生成的更具針對性的評估指標,特別是一個可以在不依賴傳統輸出比較的情況下評估生成代碼的語法準確性和操作效率的指標。

    增強未來的代碼功能

    隨著桑迪亞的科學家們完善他們的檢索方法和人工智能模型,他們預計編碼助理不僅能生成功能準確的代碼建議,還能生成與上下文相關的代碼建議。未來的開發將側重于微調基本模型,類似于 NVIDIA 工程師在 ChipNemo 上所做的工作,并改進檢索過程,并在可用時集成更先進的 LLM 和嵌入技術。

    人工智能用于 HPC 代碼開發

    將人工智能集成到代碼開發中,特別是在高性能計算的范圍內,代表著生產力和效率的重大飛躍。NVIDIA NeMo 等一些產品站在這一變革的最前沿,突破了人工智能在復雜計算環境中所能實現的極限。通過不斷調整和改進他們的人工智能模型和方法,桑迪亞旨在為您提供強大的工具,增強您創新和解決復雜問題的能力。

    這一先進的 RAG 倡議展示了人工智能在軟件開發中的潛力,并強調了有針對性的解決方案在技術進步中的重要性。

    在桑迪亞,他們正在評估內部和外部云解決方案,以承載這些復雜的人工智能模型,這需要大量的 GPU 資源。選擇取決于合適硬件的可用性和桑迪亞團隊的使用規模。與 NVIDIA 等供應商合作可以提供寶貴的支持,尤其是將其容器系統與 Sandia 現有的基礎設施集成。

    更多信息

    有關更多信息,請參閱以下資源:

    ChipNeMo:領域適應型語言模型(LLM)用于芯片設計:該研究包括了 RAG 在創建芯片設計 EDA 腳本中的應用實踐,以及用于創建并行代碼的 RAG 模型所面臨的一些類似特性的挑戰。

    ?

    0

    標簽

    人人超碰97caoporen国产