StarCoder 2:GitHub Copilot本地开源LLM替代方案

这篇具有很好参考价值的文章主要介绍了StarCoder 2:GitHub Copilot本地开源LLM替代方案。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

GitHub CoPilot拥有超过130万付费用户,部署在5万多个组织中,是世界上部署最广泛的人工智能开发工具。使用LLM进行编程辅助工作不仅提高了生产力,而且正在永久性地改变数字原住民开发软件的方式,我也是它的付费用户之一。

低代码/无代码平台将使应用程序创建、工作流自动化和数据分析更加广泛的应用,这种变革潜力支撑着人们对开源替代方案的极大兴趣,我们今天将要介绍的这个令人兴奋的发展。最近BigCode与NVIDIA合作推出了StarCoder2,这是一系列专为编码而设计的开放式LLM,我认为在大小和性能方面是目前最好的开源LLM。

在本文中,我们将介绍StarCoder2的一些基本信息,然后建立一个本地环境,搭建StarCoder2-15B模型并用Python, JavaScript, SQL, c++和Java测试其编码能力。

StarCoder2简介

StarCoder2模型有三种不同大小可供选择,包括3B、7B和15B参数,并且支持广泛的编程语言。每个模型都是在The Stack v2上进行训练的,这是当前最广泛的用于LLM预训练的开源代码数据集。模型的主要特点如下:

  • 3B(由ServiceNow提供)、7B(由Hugging Face提供)和15B参数版本(由NVIDIA使用NVIDIA NeMo)
  • 所有模型使用分组查询注意力(Grouped Query Attention)
  • 上下文窗口为16,384个标记,滑动窗口注意力为4,096个标记
  • 模型是使用填空目标(Fill-in-the-Middle objective)进行训练的
  • 训练时使用了3+ T(3B)、3.5+ T(7B)、4+ T(15B)标记以及600多种编程语言
  • StarCoder2–15B在StarCoder2模型中是最佳的,并在许多评估中与其他33B+模型相匹配。StarCoder2–3B的性能与StarCoder1–15B相当
  • 训练时使用了1024 x H100 NVIDIA GPU
  • 所有模型均具有商业友好的许可证

StarCoder2的能力(特别是15B模型)在性能指标中明显优于其他相同尺寸的模型,并且与CodeLlama-34B相匹配。

StarCoder 2:GitHub Copilot本地开源LLM替代方案,github,copilot,开源,深度学习,大语言模型

在具有16K标记的上下文长度下,模型处理广泛的代码库和指令,确保了全面的代码理解和生成能力。

StarCoder2安装

为了简单起见,我们使用venv创建虚拟环境,然后安装相应的包

 # Create a virtual environment
 mkdirstarcoder2&&cdstarcoder2
 python3-mvenvstarcoder2-env
 sourcestarcoder2-env/bin/activate
 
 # Install dependencies
 pip3installtorch
 pip3installgit+https://github.com/huggingface/transformers.git
 pip3installdatasets
 pip3installipykerneljupyter
 pip3install--upgradehuggingface_hub
 pip3installaccelerate# to run the model on a single / multi GPU
 pip3installbitsandbytes
 
 # Loging to Huggingface Hub
 huggingface-clilogin
 
 # Optionally, fire up VSCode or your favorite IDE and let's get rolling!
 code .

看看15B模型的内存占用:

  • torch.bfloat16,~32.2 GB
  • load_in_8bit, ~16.9 GB
  • load_in_4bit, ~9.2 GB

可以看到,如果使用24G的GPU,那么最高的量化模型是8bit,所以这里我们呢直接使用它

 fromtransformersimportAutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig
 
 #如果你的内存太小需要使用 4bit 那么用这个参数 `load_in_4bit=True` 
 quantization_config=BitsAndBytesConfig(load_in_8bit=True)
 
 checkpoint="bigcode/starcoder2-15b"
 tokenizer=AutoTokenizer.from_pretrained(checkpoint)
 model=AutoModelForCausalLM.from_pretrained(checkpoint, quantization_config=quantization_config)

这样模型就会自动下载和加载

StarCoder 2:GitHub Copilot本地开源LLM替代方案,github,copilot,开源,深度学习,大语言模型

让我们检查模型的内存占用:

 print(f"Memory footprint: {model.get_memory_footprint() /1e6:.2f} MB")
 # Memory footprint: 16900.18 MB

这样模型就算加载成功了,下面我们使用5道不同语言的编码题,如Python, JavaScript, SQL, c++和Java,来评估其编码能力。

编码能力测试

我们直接调用generate函数就可以获得模型的输出,这里也可以更改max_length来获得更多的上下文

 inputs=tokenizer.encode("def factorial(n):", return_tensors="pt").to("cuda")
 outputs=model.generate(inputs, eos_token_id=tokenizer.eos_token_id, max_length=100, num_return_sequences=1)
 print(tokenizer.decode(outputs[0]))

下面的prompt就是我们让它为我们的函数进行补全,我们输入的是

 def factorial(n):

让模型帮我们继续生成这个函数,结果如下:

 def factorial(n):
     if n == 0:
         return 1
     else:
         return n * factorial(n-1)
 
 print(factorial(5))

Python中使用递归计算数字的阶乘是正确的。当调用factorial(5)时,它会正确地计算出5。如果n == 0,返回1,确保递归正确结束。因为我们没有输入任何要求,所以它返回这个结果没有任何问题,并且这个函数是可以正确运行的,看样子还不错。

下面我们来进行一个JS的问题,后面我们就不编写代码了,直接输入我们的prompt

 function filterArray(arr) {
     // Complete the function to filter out numbers greater than 10

结果如下:

  function filterArray(arr) {
      // Complete the function to filter out numbers greater than 10
   return arr.filter(function(num){
    return num <= 10;
   });
  }

filterArray函数使用array .prototype.filter方法,该方法创建一个包含所有通过所提供函数实现的测试的元素的新数组。测试是num <= 10,因此新数组将只包含小于或等于10的数字,有效地过滤掉所有大于10的数字。这也是按照我们的函数注释要求来编写的。

下一个是SQL语句

 # generate a SQL query that selects all columns from a table named 'employees' where the 'salary' is greater than 50000.
 SELECT * FROM employees WHERE

结果如下:

  SELECT * FROM employees WHERE
 salary > 50000;

c++

 #include <iostream>
 class Rectangle {
 private:
     int width, height;
 public:
     Rectangle(int w, int h) : width(w), height(h) {}
     // Complete the class with methods to calculate area and perimeter
     int getArea();
     int getPerimeter();
 };

结果如下:

  #include <iostream>
  class Rectangle {
  private:
      int width, height;
  public:
      Rectangle(int w, int h) : width(w), height(h) {}
      // Complete the class with methods to calculate area and perimeter
      int getArea();
      int getPerimeter();
  };
 
  int Rectangle::getArea() {
      return width * height;
  }
 
  int Rectangle::getPerimeter() {
      return 2 * (width + height);
  }
 
  int main() {
      int w, h;
      std::cin >> w >> h;
      Rectangle r(w, h);
      std::cout << r.getArea() << std::endl;
      std::cout << r.getPerimeter() << std::endl;
      return 0;
  }

Rectangle类的实现是正确的。它正确地定义了成员函数getArea和getPerimeter,分别计算并返回矩形的面积和周长。main函数从标准输入中读取矩形的宽度和高度,然后创建一个rectangle对象r并输出其面积和周长。

运行这个程序时,它将等待用户输入两个整数(表示宽度和高度),然后它将根据这些值显示计算出的面积和周长。

Java

 public class Main {
     public static boolean isPrime(int number) {
         // Complete the method to check if number is prime
     }
 }

结果如下:

  public class Main {
      public static boolean isPrime(int number) {
          if (number <= 1) {
              return false;
          }
          for (int i = 2; i < number; i++) {
              if (number % i == 0) {
                  return false;
              }
          }
          return true;
      }
  }

代码在语法和逻辑上都是正确的,它涵盖了排除小于或等于1的数字的基本情况,并迭代检查给定数字的任何除数。如果找到除数,则返回false;如果没有找到除数,则返回true,正确识别该数为素数。

总结

上面的几个简单的例子可以证明StarCoder2作为Copilot的本地替代应该是没有问题的,我们日常工作中也只是让LLM帮我们完成一些简单的代码,并不会让他进行具体的系统设计工作,所以StarCoder2在这方面应该是没问题的。

但是我们也可以看到在所有这些例子中,代码都是有优化的空间的,如果你需要极致的效率恐怕StarCoder2做不到,估计Copilot也做不到。

目前看StarCoder2是拥有巨大的潜力,特别是考虑到它的大小和性能指标。虽然完全取代GitHub Copilot估计还做不到。因为它还有一些小毛病,比如在提供解决方案后,它会不时输出额外的乱码(这可能和精度有关,据说使用版精度或全精度会好,但我不确定)。

另外就是它需要在本地占用大约16G的显存,如果没有显卡使用cpu推理的话那就需要额外的16G内存,并且速度还很慢(但是国内Copilot也不快)。

如果你没有Copilot它还是值得一试的,因为毕竟对于我们来说多了一个选择和获取解决方案的渠道。这里我们也可以看到在2024年这类高性能的开源编码LLM还会继续发展,我们会深入的关注它的发展。

论文地址:

https://avoid.overfit.cn/post/c6c8a0130c934a4da024ebdb8108ae8d

作者:Datadrifters文章来源地址https://www.toymoban.com/news/detail-838279.html

到了这里,关于StarCoder 2:GitHub Copilot本地开源LLM替代方案的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Github Copilot在JetBrains软件中登录Github失败的解决方案

    Github Copilot在JetBrains软件中登录Github失败的解决方案

    我在成功通过了Github Copilot的学生认证之后,在VS Code和PyCharm中安装了Github Copilot插件,但在PyCharm中插件出现了问题,在登录Github时会一直Retrieving Github Device Code,最终登录失败。 我尝试了网上修改DNS,使用校园网,节点改全局模式等诸多操作都没有成功,后来通过设置PyCha

    2024年02月14日
    浏览(8)
  • 类ChatGPT的各种语言大模型LLM开源Github模型集合​

    类ChatGPT的各种语言大模型LLM开源Github模型集合​

    作为开发人员,面对堪称科技奇点爆发的ChatGPT,我们如何应对。当然是努力跟进,虽然ChatGPT不开源,但是有诸多不输ChatGPT的各类语言大模型LLM有分享。我们筛选出其中影响力较大的各个开源Github仓库,收录到 类ChatGPT的各种语言大模型开源Github模型集合​ http://www.webhub123.

    2024年02月08日
    浏览(8)
  • Github Copilot绑定Jetbrains IDE无效的解决方案

    在Github中进行教育认证后不会自动开通Copilot功能 ,因此,在进行了Github教育认证之后,在使用之前要进入Github Copilot官网开通Coplilot,如果忽略了这一点,绑定Jetbrains IDE时就会产生绑定无效并卡在“Waiting for GitHub Authentication…”界面的问题。 如果确认开通后仍然存在无法在

    2024年02月12日
    浏览(12)
  • idea安装github copilot登录后状态无变化解决方案

    idea安装github copilot登录后状态无变化解决方案

    开启代理在idea中下载GitHub Copilot插件,点击登录,始终无法正常使用github copilot,一直停留在登录状态。 浏览器显示已激活,但一直是需要登录。 我的idea版本是2022.2 github copilot版本是1.2.4.2459 首先确认idea开启代理 其次访问 https://github.com/settings/copilot 确认已经绑定银行卡信息

    2024年02月15日
    浏览(9)
  • 首个接入 GPT-4,曾经比 GitHub Copilot 还好用的代码编辑器,开源了!

    首个接入 GPT-4,曾经比 GitHub Copilot 还好用的代码编辑器,开源了!

    公众号关注 “GitHubDaily” 设为 “星标”,每天带你逛 GitHub! 上周四,GitHub Copilot X 震撼发布,将一众老牌代码编辑器打得措手不及。 但其实,Copilot X 不是第一个集成 GPT-4 模型的 AI 智能编程工具。 在它发布的一两周前,一款名为 Cursor 的代码编辑器便已开始在技术圈内被

    2024年02月09日
    浏览(14)
  • 【GitHub Copilot】JetBrains使用GitHub Copilot

    【GitHub Copilot】JetBrains使用GitHub Copilot

    使用GitHub Copilot快一年了,已经习惯了有这个“结对编程”的AI小伙伴的办公方式。这里记录一下使用GitHub Copilot的方法。 在GitHub账号的设置里就可以看到Copilot的入口,如果没有激活过的话,会有一个免费试用期。到期了用外币信用卡付款。价格是每个月10美刀(包年则是10

    2024年02月01日
    浏览(8)
  • GitHub Copilot(包括Github Copilot Chat)的使用

    GitHub Copilot(包括Github Copilot Chat)的使用

    目录 1.在Pycharm下载GitHub Copilot插件 2.使用Github账号授权 3.使用GitHub Copilot 3.1 接受或者拒绝代码建议 3.2 查看下一个建议 3.3 接受部分建议 3.4 根据注释生成代码建议 4.Github Copilot Chat的使用 GitHub Copilot 是一个 AI 结对程序员,可在您编码时提供自动完成风格的建议。您可以通过开

    2024年02月20日
    浏览(7)
  • 终端上的GitHub Copilot以及IDE上的GitHub Copilot

    Github Copilot文档地址:Github Copilot文档 VSCode 安装VSCode:如果您还没有安装VSCode,请前往VSCode官方网站下载并安装最新版本的VSCode。 安装GitHub Copilot插件:在VSCode中,点击左侧的扩展图标(四个方块组成的正方形),搜索并安装\\\"GitHub Copilot\\\"插件。 配置GitHub Copilot:安装完插件后

    2024年02月03日
    浏览(9)
  • 终端上的Github Copilot和IDE上的Github Copilot

    Github Copilot文档地址:Github Copilot文档 安装VSCode:如果您还没有安装VSCode,请前往VSCode官方网站下载并安装最新版本的VSCode。 安装GitHub Copilot插件:在VSCode中,点击左侧的扩展图标(四个方块组成的正方形),搜索并安装\\\"GitHub Copilot\\\"插件。 配置GitHub Copilot:安装完插件后,

    2024年02月03日
    浏览(17)
  • Github Copilot 的补强工具Github Copilot Labs的常用功能介绍

    Github Copilot 的补强工具Github Copilot Labs的常用功能介绍

    一、什么是Github Copilot Labs Github Copilot Labs是由 GitHub 推出的一款基于人工智能技术的代码协作工具,旨在协助开发者更加快速、高效地编写代码。该工具使用了机器学习技术,通过学习大量的开源代码和编写实践,提供了对于代码变量、函数、类的自动补全和提示,甚至可以

    2024年02月12日
    浏览(8)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包