ChatGPT和Claude 对比测试(以Review MLIR Codegen代码为例)

这篇具有很好参考价值的文章主要介绍了ChatGPT和Claude 对比测试(以Review MLIR Codegen代码为例)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Claude在MLIR代码分析上完全超越了ChatGPT并表现十分惊艳,请阅读全文或者自己注册感受它的强大。结论:在本文的任务中,Claude > ChatGPT >> NewBing

0x0. 前言

这里将以oneflow IR部分中的一个Codegen任务(目标是在mlir codegen中支持oneflow stream,用oneflow stream替换pass中自己生成的stream,PR链接为:https://github.com/Oneflow-Inc/oneflow/pull/10149)为例,来对比一下newibing(chatgpt)和claude对mlir的理解能力。claude是Anthropic公司推出的类似于chatgpt的聊天机器人,这家公司是OpenAI的最大竞争对手之一,因为创办这家公司的人也是OpenAI的前员工。然后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),也就是:

def EliminateAllocOpsPass : Pass<"eliminate-alloc-ops", "ModuleOp"> {
  let summary = "";
  let constructor = "mlir::oneflow::createEliminateAllocOpsPass()";
  let dependentDialects = ["pdl_interp::PDLInterpDialect", "pdl::PDLDialect"];
}

def AppendOneFlowStreamPass : Pass<"append-ofstream", "ModuleOp"> {
  let summary = "append oneflow stream to gpu function arguments";
  let constructor = "mlir::oneflow::createAppendOneFlowStreamPass()";
}

def MgpuToOneFlowStreamPass : Pass<"mgpu-to-ofstream", "ModuleOp"> {
  let summary = "convert mlir abi about mgpu to oneflow stream, this pass should be invoked after append-ofstream pass";
  let constructor = "mlir::oneflow::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:

ChatGPT和Claude 对比测试(以Review MLIR Codegen代码为例)

newbing直接看不懂,其实我感觉claude也应该看不懂吧,抱着怀疑的态度问一下。

ChatGPT和Claude 对比测试(以Review MLIR Codegen代码为例)
ChatGPT和Claude 对比测试(以Review MLIR Codegen代码为例)

太疯狂了,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"

Constraint IsFuncArguments(value: Value) [{
  return success(llvm::dyn_cast<mlir::BlockArgument>(value));
}];

Pattern {
  let alloc = op<memref.alloc>();
  let copy = op<memref.copy>(alloc.0, arg: IsFuncArguments);

  rewrite alloc with {
    erase copy;
    replace alloc with arg;
  };
}

接下来,我们分别对比一下newbing和chatgpt对它的分析结果。

ChatGPT和Claude 对比测试(以Review MLIR Codegen代码为例)

newbing并不能解析出这段代码是MLIR的PDL语言,当然也无法理解代码内容。我们可以再使用Claude试试。

ChatGPT和Claude 对比测试(以Review MLIR Codegen代码为例)

ChatGPT和Claude 对比测试(以Review MLIR Codegen代码为例)

个人感觉这个解释是非常强大且精准的,Claude的答案非常惊艳。

0x2.2 AppendOneFlowStreamPass

接下来我们看一下AppendOneFlowStreamPass的实现,这个实现是在oneflow/ir/lib/OneFlow/Transform/OneFlowStream.cpp这个文件,具体代码如下:

struct AppendOneFlowStreamPattern final : public OpRewritePattern<func::FuncOp> {
 public:
  explicit AppendOneFlowStreamPattern(mlir::MLIRContext* context)
      : OpRewritePattern<func::FuncOp>(context, /*benefit=*/0) {}
  mlir::LogicalResult matchAndRewrite(func::FuncOp op,
                                      mlir::PatternRewriter& rewriter) const override {
    auto ptr_type = LLVM::LLVMPointerType::get(IntegerType::get(rewriter.getContext(), 8));
    if (llvm::dyn_cast<LLVM::LLVMPointerType>(op.getFunctionType().getInputs().back()))
      return success();

    llvm::SmallVector<Type> new_operand_type;
    for (auto type : op.getFunctionType().getInputs()) { new_operand_type.push_back(type); }
    new_operand_type.push_back(ptr_type);
    auto function_type =
        rewriter.getFunctionType(new_operand_type, op.getFunctionType().getResults());

    auto func = rewriter.create<func::FuncOp>(op.getLoc(), op.getName(), function_type);
    for (auto pair : op->getDialectAttrs()) { func->setAttr(pair.getName(), pair.getValue()); }
    op.getBody().addArgument(ptr_type, func->getLoc());
    IRMapping bvm;
    op.getRegion().cloneInto(&func.getRegion(), bvm);
    rewriter.eraseOp(op);
    return success();
  }
};

c++代码newbing(chatgpt)按道理可以看懂了,我们让它分析一下:

ChatGPT和Claude 对比测试(以Review MLIR Codegen代码为例)

直接问chatgpt,它还是不懂这段代码。我手动提示了下它说,这段代码定义了一个mlir pattern,然后它先是重复我的话给出了一段回答。然后接下来就是胡说八道了,在这个例子中表现很差。接下来我们拷问一下Claude:

ChatGPT和Claude 对比测试(以Review MLIR Codegen代码为例)
ChatGPT和Claude 对比测试(以Review MLIR Codegen代码为例)

我们继续问一下c++代码中的一些细节:

ChatGPT和Claude 对比测试(以Review MLIR Codegen代码为例)
ChatGPT和Claude 对比测试(以Review MLIR Codegen代码为例)

非常强大,给出的解释大多比较精准,并且似乎Claude真的完全理解了这段代码的逻辑。我们需要注意的是,这段代码是我同事今天才写的,模型的泛化性真的很好。

MgpuToOneFlowStreamPass

我们最后再分析下MgpuToOneFlowStreamPass的实现。

struct MgpuToOneFlowStreamPattern final : public OpRewritePattern<LLVM::CallOp> {
 public:
  explicit MgpuToOneFlowStreamPattern(mlir::MLIRContext* context)
      : OpRewritePattern<LLVM::CallOp>(context, /*benefit=*/0) {}
  mlir::LogicalResult matchAndRewrite(LLVM::CallOp op,
                                      mlir::PatternRewriter& rewriter) const override {
    auto ptr_type = LLVM::LLVMPointerType::get(IntegerType::get(rewriter.getContext(), 8));
    auto func = op->getParentOfType<LLVM::LLVMFuncOp>();
    auto callee = op.getCallee();
    if (!func || !callee) return failure();
    Value stream = func.getArguments().back();
    if (stream.getType() != ptr_type) {
      LOG(ERROR) << "failed to find stream in llvm.func block arguments";
      return failure();
    }

    DenseMap<StringRef,
             std::pair<std::function<bool(LLVM::CallOp&, Value&)>,
                       std::function<void(mlir::PatternRewriter&, LLVM::CallOp&, Value&)>>>
        oneflow_abi = {
            {"mgpuStreamCreate",
             {[](LLVM::CallOp& op, Value& stream) { return true; },
              [](mlir::PatternRewriter& rewriter, LLVM::CallOp& op, Value& stream) {
                rewriter.replaceOp(op, {stream});
              }}},
            {"mgpuLaunchKernel",
             {[](LLVM::CallOp& op, Value& stream) {
                unsigned idx = op->getNumOperands();
                return op.getOperand(idx - 3) != stream;
              },
              [](mlir::PatternRewriter& rewriter, LLVM::CallOp& op, Value& stream) {
                unsigned idx = op->getNumOperands();
                auto target = op.getOperand(idx - 3).getDefiningOp();
                rewriter.replaceOp(target, {stream});
              }}},
            {"mgpuStreamSynchronize",
             {[](LLVM::CallOp& op, Value& stream) { return true; },
              [](mlir::PatternRewriter& rewriter, LLVM::CallOp& op, Value& stream) {
                rewriter.eraseOp(op);
              }}},
            {"mgpuStreamDestroy",
             {[](LLVM::CallOp& op, Value& stream) { return true; },
              [](mlir::PatternRewriter& rewriter, LLVM::CallOp& op, Value& stream) {
                rewriter.eraseOp(op);
              }}},
        };
    auto out = oneflow_abi.find(callee.value().str());
    if (out != oneflow_abi.end() && out->getSecond().first(op, stream)) {
      out->getSecond().second(rewriter, op, stream);
    }
    return success();
  }
};

还是先让chatgpt分析下:

ChatGPT和Claude 对比测试(以Review MLIR Codegen代码为例)

回答还是比较模棱两可,并且可以确定的事情是chatgpt完全没有理解这段代码。

接下来还是使用Claude来测试下:

ChatGPT和Claude 对比测试(以Review MLIR Codegen代码为例)

这个地方让我震惊的点是,它不仅理解了这段代码,而且知道在MLIR里面这段代码只是一个Pattern规则,如果要应用这个规则需要在MLIR里面再构建一个Pass。最后我们再让Claude给我们一些Review意见:

ChatGPT和Claude 对比测试(以Review MLIR Codegen代码为例)

这里的第4点提示让我感到有些疑惑,我还请教了下同事,顺便让同事补充一下注释。

ChatGPT和Claude 对比测试(以Review MLIR Codegen代码为例)

整体来说,在阅读MLIR代码方面,Claude已经相当智能,全面领先Newbing(Chatgpt),感觉以后可以日常用Claude来辅助Review IR相关代码。

0x3. 总结

我这里以MLIR的一个任务对比了一下ChatGpt和Claude,我感受到了Calude的强大之处。虽然暂时还没有评测过别的任务,但我已经被Calude表现出来的代码分析能力所震撼。我们甚至可以将Claude作为一个入门AI编译器的入门工具

--------------------------------分割线-------------------------------------

评论区有朋友提出newbing的一些功能被限制了,并不等价于chatgpt3.5,我借了一个官方的chatgpt账号重新测试了一下,以下是测试结果:

ChatGPT和Claude 对比测试(以Review MLIR Codegen代码为例)

ChatGPT和Claude 对比测试(以Review MLIR Codegen代码为例)
就这个例子来说,chatgpt的解释没有Claude那么细节,Claude的结果确实比chatgpt的好一点,不过chatgpt确实知道这个是MLIR的Pass,不像newbing那样被限制。

EliminateAllocOpsPass

接下来问问 EliminateAllocOpsPass 的实现:

ChatGPT和Claude 对比测试(以Review MLIR Codegen代码为例)
ChatGPT和Claude 对比测试(以Review MLIR Codegen代码为例)
我们可以对比下上面Calude的结果,感觉针对这个问题ChatGPT的描述以及理解是不如Claude那么自然的。从这个回答里面我们并不能看出ChatGPT理解了这个实现的原理,而Claude则完全理解了。

ChatGPT和Claude 对比测试(以Review MLIR Codegen代码为例)

AppendOneFlowStreamPattern

ChatGPT和Claude 对比测试(以Review MLIR Codegen代码为例)
ChatGPT和Claude 对比测试(以Review MLIR Codegen代码为例)

对比下Claude:

ChatGPT和Claude 对比测试(以Review MLIR Codegen代码为例)

可以看到Claude的分析比ChatGPT好很多,它明确的知道 if (llvm::dyn_cast<LLVM::LLVMPointerType>(op.getFunctionType().getInputs().back())) 这行代码是检查当前函数是否已经有Stream参数,而ChatGPT的回答则不知道这个指针类型的参数就代表Stream。

接下来是细节分析。

ChatGPT和Claude 对比测试(以Review MLIR Codegen代码为例)
ChatGPT和Claude 对比测试(以Review MLIR Codegen代码为例)
对比下Claude

ChatGPT和Claude 对比测试(以Review MLIR Codegen代码为例)Claude的解释再次击败了ChatGPT

ChatGPT和Claude 对比测试(以Review MLIR Codegen代码为例)
对比下Claude

ChatGPT和Claude 对比测试(以Review MLIR Codegen代码为例)可以看到Claude的结果显然也是更优的,不仅为我们解释了所有细节还列出了用到的MLIR相关属性和接口。

MgpuToOneFlowStreamPass

我们最后再分析下MgpuToOneFlowStreamPass的实现。

ChatGPT和Claude 对比测试(以Review MLIR Codegen代码为例)
对比Claude

ChatGPT和Claude 对比测试(以Review MLIR Codegen代码为例)Claude的结果也显著优于ChatGPT,并且可以发现ChatGPT的回答里面还漏掉了一个mgpuStreamSynchronize ABI。最后,我们再问一下ChatGPT能不能给出一些修改意见。

ChatGPT和Claude 对比测试(以Review MLIR Codegen代码为例)
感觉和Claude差不多。

结论2

整体来看,在这个Review MLIR代码的任务中,Claude > ChatGPT >> NewBing文章来源地址https://www.toymoban.com/news/detail-457725.html

到了这里,关于ChatGPT和Claude 对比测试(以Review MLIR Codegen代码为例)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Claude3与GPT4全面对比

    Claude 3是由人工智能公司Anthropic推出的最新大语言模型,一经推出就在学术界和普通用户中引起轰动。Claude 3在逻辑推理、数学、编程、多语言理解和视觉等方面表现出色,被认为全面超越了此前的GPT-4模型。一些用户甚至认为Claude 3展现出了自我意识的迹象,但专家们对此持怀疑

    2024年04月17日
    浏览(39)
  • 对比CahtGPT Bard Claude2对中文的理解

    今天简单测试了一下目前这三个很火的模型对中文的理解能力 简单问题 鲁迅和周树人的关系 Bard CahtGPT Claude 介绍一下平凡的世界这本书 Bard CahtGPT

    2024年02月15日
    浏览(33)
  • 【AI大模型】GPT4 - ChatGPT - Sage - Claude - 文心一言 - 科大讯飞 - ChatGLM130B - AquilaChat7B 写代码能力测评:LSM Tree 算法

    实现一个基本的 LSM Tree(Log-Structured Merge-Tree)算法需要考虑以下几个组件: Memtable:存储内存中的数据,可以用一个简单的键值对数据结构表示,例如 Go 中的 map[string]string 。 SSTable:一个不可变的、排好序的键值对数组,存储在磁盘上。 合并策略:一种方

    2024年02月12日
    浏览(51)
  • 单元测试之 - Review一个微服务的单元测试

    这里以github上一个microservice的demo代码为例,来看看如何为一个完整的服务编写单元测试。具体代码如下所示,我们重点查看一下catalog和customer,order中的单元测试有哪些。 首先来看catalog服务的单元测试,这个服务下面主要编写了CatalogWebIntegrationTest.java和RepositoryTest.java。下图是

    2024年02月14日
    浏览(43)
  • ChatGPT | 分享论文 Rebuttal、Review 时可能会用到的 Prompt

    ChatGPT 可以帮助润色学术论文,助力搞科研! 论文 Rebuttal, Review 过程中可能使用的一个 Prompt: Prompt:I want you to act as an English translator, spelling corrector and improver. I will speak to you in any language and you will detect the language, translate it and answer in the corrected and improved version of my text, in En

    2024年02月04日
    浏览(82)
  • 用不了chatgpt,试试Claude-Claude注册教程

     Claude是一款人工智能聊天机器人,由 Anthropic 公司开发。说到Anthropic公司就有意思了,Anthropic成立于2021年,其联合创始人Dario Amodei曾经担任OpenAI 研究副总裁,后来因为对OpenAI变成了CloseAI,心存不满,因此就自立门户。在拿了微软的投资从OpenAI变成了CloseAI后,Anthropic也在后续

    2024年02月03日
    浏览(48)
  • 在文心一言超越ChatGPT3.5后,我们做了大模型对比测试。

      IDC发布的AI大模型评估报告中,文心一言拿下12个指标中的7个满分,综合评分第一。百度副总裁吴甜表示,新版文心一言已超越ChatGPT3.5。这是令人振奋的新闻。不过,我们还没能体验到文心一言。 除了文心一言,号称超过ChatGPT3.5大模型,还有google的bard,Meta的LlaMA2和claud

    2024年02月12日
    浏览(38)
  • GPT4、文心一言4、ChatGLM、Claude2.1四大语言模型生成效果对比

            随着AIGC大风起,也掀起了语言模型大争之世,各种语言模型如雨后春笋,让大家眼花缭乱。周周都有新的选手入场,月月都有新的模型问世。不过其中最受人瞩目的当属GPT4、文心一言4、ChatGLM、Claude2.1四大模型。隐隐有傲视群雄之姿,今天我们也对这语言模型的四大

    2024年02月04日
    浏览(52)
  • ChatGPT⼊门到精通(5):ChatGPT 和Claude区别

    Claude是Anthropic开发的⼀款⼈⼯智能助⼿。 官⽅⽹站: 它可以通过⾃然语⾔与您进⾏交互,理解您的问题并作出回复。Claude的主要功能包括: 1、问答功能 Claude可以解答⼴泛的常识问题与知识问题。⽆论是历史上的某个事件,理科技术专业知 识,还是当今的社会热点问题,Claude都可

    2024年02月10日
    浏览(29)
  • ChatGPT最强对手Claude使用教程

    Cladue最近很火,作为ChatGPT4的平替版,它无需付费,使用方便,很多网友通过效果对比,发现它的性能要好于ChatGPT3.5,可以媲美ChatGPT4。最主要是使用很方便,十分钟就可以轻松部署,下面记录一下自己的使用历程,希望能给大家一点帮助。 目录 一、Claude简介 二、Cladue可以

    2023年04月17日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包