精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Claude在MLIR代碼分析上完全超越了ChatGPT

jf_pmFSk4VX ? 來源:GiantPandaCV ? 2023-04-19 10:25 ? 次閱讀

Claude在MLIR代碼分析上完全超越了ChatGPT并表現十分驚艷,請閱讀全文或者自己注冊感受它的強大。

0x0. 前言

這里將以oneflow IR部分中的一個Codegen任務(目標是在mlir codegen中支持oneflow stream,用oneflow stream替換pass中自己生成的stream,PR鏈接為:https://github.com/Oneflow-Inc/oneflow/pull/10149)為例,來對比一下chatgpt和claude對mlir的理解能力。claude是Anthropic公司推出的類似于chatgpt的聊天機器人,這家公司是OpenAI的最大競爭對手之一,因為創辦這家公司的人也是OpenAI的前員工。本次使用的chatgpt可以在這個 https://chatbot.theb.ai/#/chat/1002 訪問。然后Claude是參考這個issue: https://www.zhihu.com/question/594115372/answer/2988759047 將其直接添加到slack里進行對話。

0x1. PR簡介

PR鏈接為:https://github.com/Oneflow-Inc/oneflow/pull/10149

這個PR實現了3個Pass (定義在 OneFlowPasses.td),也就是:

defEliminateAllocOpsPass:Pass<"eliminate-alloc-ops","ModuleOp">{
letsummary="";
letconstructor="mlir::createEliminateAllocOpsPass()";
letdependentDialects=["pdl_interp::PDLInterpDialect","pdl::PDLDialect"];
}

defAppendOneFlowStreamPass:Pass<"append-ofstream","ModuleOp">{
letsummary="appendoneflowstreamtogpufunctionarguments";
letconstructor="mlir::createAppendOneFlowStreamPass()";
}

defMgpuToOneFlowStreamPass:Pass<"mgpu-to-ofstream","ModuleOp">{
letsummary="convertmlirabiaboutmgputooneflowstream,thispassshouldbeinvokedafterappend-ofstreampass";
letconstructor="mlir::createMgpuToOneFlowStreamPass()";
}

EliminateAllocOpsPass用來消除IR中的無效memref.alloc指令,AppendOneFlowStreamPass給GPU相關的函數添加GPU啟動kernel需要的stream參數,MgpuToOneFlowStreamPass發生在AppendOneFlowStreamPass執行之后(它生成了stream參數)并把mgpu相關的stream abi替換為oneflow stream abi。

我們分別使用newbing和claude來讓它們分析一下這幾行OneFlowPasses.td中定義的Pass意圖:

newbing:

bee91486-de08-11ed-bfe3-dac502259ad0.png在這里插入圖片描述

newbing直接看不懂,其實我感覺claude也應該看不懂吧,抱著懷疑的態度問一下。

bf147b6c-de08-11ed-bfe3-dac502259ad0.pngbf1c3172-de08-11ed-bfe3-dac502259ad0.png

太瘋狂了,claude不僅讀懂了td文件的代碼,甚至為我們列出了這個代碼涉及到的MLIR概念。感覺是訓練數據考慮了MLIR相關的預料?接下來我們再對比下C++實現的Pass代碼。

0x2. 對比具體實現

PR鏈接為:https://github.com/Oneflow-Inc/oneflow/pull/10149

0x2.1 EliminateAllocOpsPass

EliminateAllocOpsPass使用MLIR提供的PDL語言來完成Pattern的匹配和重寫,具體實現在 oneflow/ir/lib/OneFlow/PDLL/AllocEliminationPatterns.pdll

#include"OneFlow/OneFlowOps.td"

ConstraintIsFuncArguments(value:Value)[{
returnsuccess(llvm::dyn_cast(value));
}];

Pattern{
letalloc=op();
letcopy=op(alloc.0,arg:IsFuncArguments);

rewriteallocwith{
erasecopy;
replaceallocwitharg;
};
}

接下來,我們分別對比一下newbing和chatgpt對它的分析結果。

bf354ce8-de08-11ed-bfe3-dac502259ad0.png在這里插入圖片描述

newbing并不能解析出這段代碼是MLIR的PDL語言,當然也無法理解代碼內容。我們可以再使用Claude試試。

bf498b22-de08-11ed-bfe3-dac502259ad0.png在這里插入圖片描述bf5334ba-de08-11ed-bfe3-dac502259ad0.png在這里插入圖片描述

個人感覺這個解釋是非常強大且精準的,Claude的答案非常驚艷。

0x2.2 AppendOneFlowStreamPass

接下來我們看一下AppendOneFlowStreamPass的實現,這個實現是在oneflow/ir/lib/OneFlow/Transform/OneFlowStream.cpp這個文件,具體代碼如下:

structAppendOneFlowStreamPatternfinal:publicOpRewritePattern{
public:
explicitAppendOneFlowStreamPattern(mlir::MLIRContext*context)
:OpRewritePattern(context,/*benefit=*/0){}
mlir::LogicalResultmatchAndRewrite(func::FuncOpop,
mlir::PatternRewriter&rewriter)constoverride{
autoptr_type=LLVM::get(rewriter.getContext(),8));
if(llvm::dyn_cast(op.getFunctionType().getInputs().back()))
returnsuccess();

llvm::SmallVectornew_operand_type;
for(autotype:op.getFunctionType().getInputs()){new_operand_type.push_back(type);}
new_operand_type.push_back(ptr_type);
autofunction_type=
rewriter.getFunctionType(new_operand_type,op.getFunctionType().getResults());

autofunc=rewriter.create(op.getLoc(),op.getName(),function_type);
for(autopair:op->getDialectAttrs()){func->setAttr(pair.getName(),pair.getValue());}
op.getBody().addArgument(ptr_type,func->getLoc());
IRMappingbvm;
op.getRegion().cloneInto(&func.getRegion(),bvm);
rewriter.eraseOp(op);
returnsuccess();
}
};

c++代碼newbing(chatgpt)按道理可以看懂了,我們讓它分析一下:

bf5b1db0-de08-11ed-bfe3-dac502259ad0.png在這里插入圖片描述

直接問chatgpt,它還是不懂這段代碼。我手動提示了下它說,這段代碼定義了一個mlir pattern,然后它先是重復我的話給出了一段回答。然后接下來就是胡說八道了,在這個例子中表現很差。接下來我們拷問一下Claude:

bf64d148-de08-11ed-bfe3-dac502259ad0.pngbf6cf44a-de08-11ed-bfe3-dac502259ad0.png

我們繼續問一下c++代碼中的一些細節:

bf947966-de08-11ed-bfe3-dac502259ad0.pngbfaa9d18-de08-11ed-bfe3-dac502259ad0.png

非常強大,給出的解釋大多比較精準,并且似乎Claude真的完全理解了這段代碼的邏輯。我們需要注意的是,這段代碼是我同事今天才寫的,模型的泛化性真的很好。

MgpuToOneFlowStreamPass

我們最后再分析下MgpuToOneFlowStreamPass的實現。

structMgpuToOneFlowStreamPatternfinal:publicOpRewritePattern{
public:
explicitMgpuToOneFlowStreamPattern(mlir::MLIRContext*context)
:OpRewritePattern(context,/*benefit=*/0){}
mlir::LogicalResultmatchAndRewrite(LLVM::CallOpop,
mlir::PatternRewriter&rewriter)constoverride{
autoptr_type=LLVM::get(rewriter.getContext(),8));
autofunc=op->getParentOfType();
autocallee=op.getCallee();
if(!func||!callee)returnfailure();
Valuestream=func.getArguments().back();
if(stream.getType()!=ptr_type){
LOG(ERROR)<"failedtofindstreaminllvm.funcblockarguments";
returnfailure();
}

DenseMapstd::pair<std::function<bool(LLVM::CallOp&,Value&)>,
std::function<void(mlir::PatternRewriter&,LLVM::CallOp&,Value&)>>>
oneflow_abi={
{"mgpuStreamCreate",
{[](LLVM::CallOp&op,Value&stream){returntrue;},
[](mlir::PatternRewriter&rewriter,LLVM::CallOp&op,Value&stream){
rewriter.replaceOp(op,{stream});
}}},
{"mgpuLaunchKernel",
{[](LLVM::CallOp&op,Value&stream){
unsignedidx=op->getNumOperands();
returnop.getOperand(idx-3)!=stream;
},
[](mlir::PatternRewriter&rewriter,LLVM::CallOp&op,Value&stream){
unsignedidx=op->getNumOperands();
autotarget=op.getOperand(idx-3).getDefiningOp();
rewriter.replaceOp(target,{stream});
}}},
{"mgpuStreamSynchronize",
{[](LLVM::CallOp&op,Value&stream){returntrue;},
[](mlir::PatternRewriter&rewriter,LLVM::CallOp&op,Value&stream){
rewriter.eraseOp(op);
}}},
{"mgpuStreamDestroy",
{[](LLVM::CallOp&op,Value&stream){returntrue;},
[](mlir::PatternRewriter&rewriter,LLVM::CallOp&op,Value&stream){
rewriter.eraseOp(op);
}}},
};
autoout=oneflow_abi.find(callee.value().str());
if(out!=oneflow_abi.end()&&out->getSecond().first(op,stream)){
out->getSecond().second(rewriter,op,stream);
}
returnsuccess();
}
};

還是先讓chatgpt分析下:

bfc2a890-de08-11ed-bfe3-dac502259ad0.png在這里插入圖片描述

回答還是比較模棱兩可,并且可以確定的事情是chatgpt完全沒有理解這段代碼。

接下來還是使用Claude來測試下:

bfcd130c-de08-11ed-bfe3-dac502259ad0.png在這里插入圖片描述

這個地方讓我震驚的點是,它不僅理解了這段代碼,而且知道在MLIR里面這段代碼只是一個Pattern規則,如果要應用這個規則需要在MLIR里面再構建一個Pass。最后我們再讓Claude給我們一些Review意見:

bfd722ca-de08-11ed-bfe3-dac502259ad0.png在這里插入圖片描述

這里的第4點提示讓我感到有些疑惑,我還請教了下同事,順便讓同事補充一下注釋。

bfed8c0e-de08-11ed-bfe3-dac502259ad0.png在這里插入圖片描述

整體來說,在閱讀MLIR代碼方面,Claude已經相當智能,全面領先Newbing(Chatgpt),感覺以后可以日常用Claude來輔助Review IR相關代碼。

0x3. 總結

我這里以MLIR的一個任務對比了一下ChatGpt和Claude,我感受到了Calude的強大之處。雖然暫時還沒有評測過別的任務,但我已經被Calude表現出來的代碼分析能力所震撼。我們甚至可以將Claude作為一個入門AI編譯器的入門工具


審核編輯 :李倩


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • gpu
    gpu
    +關注

    關注

    28

    文章

    4702

    瀏覽量

    128710
  • 編譯器
    +關注

    關注

    1

    文章

    1618

    瀏覽量

    49052
  • ChatGPT
    +關注

    關注

    29

    文章

    1548

    瀏覽量

    7497

原文標題:0x3. 總結

文章出處:【微信號:GiantPandaCV,微信公眾號:GiantPandaCV】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    TPU-MLIR開發環境配置時出現的各種問題求解

    /workspace/model-zoo 2.4. 代碼編譯? docker的容器中, 代碼編譯方式如下: $ cd tpu-mlir$ source ./envsetup.sh$
    發表于 01-10 08:02

    科技大廠競逐AIGC,中國的ChatGPT在哪?

    ChatGPT就是GPT-3的基礎通過指令微調后得到的。 圖源:OpenAI官網 結果,2022年年底ChatGPT實現現象級
    發表于 03-03 14:28

    AI編譯器:ChatGptClaude有何區別

    整體來說,閱讀MLIR代碼方面,Claude已經相當智能,全面領先Newbing(Chatgpt),感覺以后可以日常用
    發表于 04-19 10:23 ?1778次閱讀

    ClaudeMLIR代碼分析完全超越ChatGPT并表現十分驚艷

    EliminateAllocOpsPass用來消除IR中的無效memref.alloc指令,AppendOneFlowStreamPass給GPU相關的函數添加GPU啟動kernel需要的stream參數,MgpuToOneFlowStreamPass發生在AppendOneFlowStreamPass執行之后(它生成了stream參數)并把mgpu相關的stream abi替換為oneflow stream abi。
    的頭像 發表于 04-24 14:28 ?3199次閱讀
    <b class='flag-5'>Claude</b><b class='flag-5'>在</b><b class='flag-5'>MLIR</b><b class='flag-5'>代碼</b><b class='flag-5'>分析</b><b class='flag-5'>上</b><b class='flag-5'>完全</b><b class='flag-5'>超越</b><b class='flag-5'>了</b><b class='flag-5'>ChatGPT</b>并表現十分驚艷

    如何設計MLIR的Dialect來GPU生成高性能的代碼

    為什么又要開一個新坑?原因是,最近在做的項目都是和MLIR有關,并且發現自己已經MLIR的研發道路上越走越遠了。
    的頭像 發表于 05-10 14:57 ?1779次閱讀
    如何設計<b class='flag-5'>MLIR</b>的Dialect來<b class='flag-5'>在</b>GPU<b class='flag-5'>上</b>生成高性能的<b class='flag-5'>代碼</b>?

    ChatGPT上線最強應用:分析數據、生成代碼都精通

    Code Interpreter,語言模型不僅可以生成代碼,還可以獨立執行代碼。這個插件允許用戶直接在 ChatGPT 對話窗口直接調用 Python,直接進行數據上傳、下載、
    的頭像 發表于 07-13 14:52 ?896次閱讀
    <b class='flag-5'>ChatGPT</b>上線最強應用:<b class='flag-5'>分析</b>數據、生成<b class='flag-5'>代碼</b>都精通

    ChatGPT最強競品Claude2來代碼、GRE 成績超越GPT-4,免費可用

    機器之心在此前的文章中多次介紹過 Claude,它是由 OpenAI 離職人員創建的 Anthropic 公司打造的。 ChatGPT 發布兩個月后,該公司就迅速開發出了 Claude
    的頭像 發表于 07-14 15:21 ?953次閱讀
    <b class='flag-5'>ChatGPT</b>最強競品<b class='flag-5'>Claude</b>2來<b class='flag-5'>了</b>:<b class='flag-5'>代碼</b>、GRE 成績<b class='flag-5'>超越</b>GPT-4,免費可用

    你的自選股里,99%的ChatGPT概念股沒有技術含量

    Claude是人工智能初創公司Anthropic發布的一款類似ChatGPT的軟件,它的創始團隊基本都是來自OpenAI,并被谷歌注資。從體驗上來說,是目前僅次于ChatGPT的對話
    的頭像 發表于 08-14 11:36 ?867次閱讀
    你的自選股里,99%的<b class='flag-5'>ChatGPT</b>概念股沒有技術含量

    如何適配新架構?TPU-MLIR代碼生成CodeGen全解析!

    背景介紹TPU-MLIR的CodeGen是BModel生成的最后一步,該過程目的是將MLIR文件轉換成最終的Bmodel。本文介紹CodeGen的基本原理和流程,并記錄了針對BM1684X等新架構
    的頭像 發表于 11-02 08:34 ?1645次閱讀
    如何適配新架構?TPU-<b class='flag-5'>MLIR</b><b class='flag-5'>代碼</b>生成CodeGen全解析!

    Anthropic發布Claude 3系列,超越GPT-4和Gemini Ultra

    人工智能領域的領軍企業Anthropic宣布推出全新的Claude 3系列模型,包括Claude 3 Opus、Claude 3 Sonnet和Claude 3 Haiku。據該公司稱
    的頭像 發表于 03-05 09:43 ?607次閱讀

    Anthropic發布Claude 3,單詞處理能力是ChatGPT近50倍

    人工智能領域的初創公司Anthropic近日宣布推出其最新型的聊天機器人——Claude 3。據公司透露,Claude 3的單詞處理能力是知名聊天機器人ChatGPT的近50倍,單次可處理約15萬個單詞,這一突破性的進展
    的頭像 發表于 03-06 11:21 ?803次閱讀

    Anthropic 發布 Claude 3 系列大模型和 AI 助手

    的表現超越 GPT-4/3.5 和 Gemini 1.0 Ultra/Pro。 ? 目前Opus 和 Sonnet 已可通過 claude網站和 Claude API 使用,而 Ha
    的頭像 發表于 03-08 12:29 ?404次閱讀

    Claude 3 Haiku模型Amazon Bedrock正式可用

    ,其中Claude 3 Haiku模型已經亞馬遜云科技的Amazon Bedrock平臺上正式上線,為用戶提供更快速、更緊湊的生成式人工智能體驗。
    的頭像 發表于 03-19 11:12 ?708次閱讀

    谷歌Gemini流量已追平ChatGPT的25%,但Claude、Copilot使用率仍偏低

    同時,Friedman指出,目前備受關注的Claude的用戶規模較小,而Microsoft的Copilot也沒能贏得市場份額。盡管ChatGPT在網絡上有很高知名度,但其流量水平與其去年大致相同,并無顯著增長。
    的頭像 發表于 04-12 15:04 ?801次閱讀

    Anthropic 發布Claude 3.5 Sonnet模型運行速度是Claude 3 Opus的兩倍

    Anthropic 發布Claude 3.5 Sonnet最新模型 新模型推理、知識和編碼能力評估方面超越以前的版本和競爭對手GPT 4o模型,同時其運行速度是
    的頭像 發表于 06-21 15:43 ?722次閱讀
    Anthropic 發布<b class='flag-5'>Claude</b> 3.5 Sonnet模型運行速度是<b class='flag-5'>Claude</b> 3 Opus的兩倍