代码大模型揭秘:从下载到推理,全流程体验StarCoder

选择模型

模型榜单

大模型的发展日新月异,性能强劲的大模型不断涌现,可以实时关注开源大模型的榜单,选择合适自己的大模型

开源大模型榜单

image-20240326160656604

开源代码大模型榜单

image-20240326160634333

模型网站

目前主流的下载模型的网站就是

  • huggingface 全球社区,模型发布的第一社区,需要科学上网
  • modelscope 中文社区,模型不完整,更新滞后于huggingface

因为笔者最近对代码生成大模型十分感兴趣,所以这里就选择一个代码生成模型来下载和生成

这里我选的是starcoder2-7B模型,关于starcoder2模型的详细介绍可以看他们在huggingface上的model card

下载模型

下载模型方式有两种方式

使用transformers下载

from transformers import AutoModel, AutoTokenizer
model_name = 'starcoder2-7b'
model = AutoModel.from_pretrained(model_name)

这里是使用transformers加载模型,如果模型不存在则会去huggingface上下载模型,下载完成的模型会默认存储到~/.cache/huggingface/hub

使用huggingface_hub下载

from huggingface_hub import snapshot_download
from tqdm.auto import tqdm# 使 huggingface_hub 的下载与 tqdm 兼容
tqdm.pandas()MODEL_URL = "bigcode/starcoder2-7b"
TARGET_PATH = "./starcoder2-7b"
SNAPSHOT_PATH = snapshot_download(MODEL_URL, cache_dir=TARGET_PATH, use_auth_token=True)print(f"Downloaded successfully! Files are located in: {SNAPSHOT_PATH}")

这里使用的是huggingface_hub下载,可以通过cache_dir制定下载地址,并且这种方式还支持可视化脚本,类似这种:

Downloading README.md: 100%|██████████| 6.98k/6.98k [00:00<00:00, 38.0MB/s]
Fetching 18 files: 100%|██████████| 18/18 [00:01<00:00, 14.72it/s]
Downloaded successfully! Files are located in: ./starcoder2-7b/models--bigcode--starcoder2-7b/snapshots/42df1e961fe8546f0c891cea1d83c3b17631968f/

模型生成内容

下载依赖

官网requirements.txt

git+https://github.com/huggingface/transformers.git
accelerate==0.27.1
datasets>=2.16.1
bitsandbytes==0.41.3
peft==0.8.2
trl==0.7.10
wandb==0.16.3
huggingface_hub==0.20.3

执行命令 pip install -r requirements.txt

推理脚本

import torch
from transformers import AutoTokenizer, AutoModelForCausalLM## 在指定的gpu上推理
gpu_index = 0
device = torch.device(f'cuda:{gpu_index}')model_name = '/workspace/xieshijie/huggingface-models/starcoder2-7b/models--bigcode--starcoder2-7b/snapshots/42df1e961fe8546f0c891cea1d83c3b17631968f'
## 把模型通过transformer的AutoModelForCausalLM部署到指定GPU
model = AutoModelForCausalLM.from_pretrained(model_name).to(device)
tokenizer = AutoTokenizer.from_pretrained(model_name)## 推理的输入
input_text = '    public U createFactory(T source) {\n        Supplier<U> tSupplier = SERVICE_MAP.get(source);\n        if (Objects.nonNull(tSupplier)) {\n            return tSupplier.get();\n        }\n\n        log.info(\"not found ServiceFactoryTemplate service, type == {}\", getUClass());\n        '
inputs = tokenizer.encode(input_text, return_tensors="pt", max_length=4096, truncation=True).to(device)
attention_mask = torch.ones(inputs.shape, dtype=torch.long).to(device)## 推理的输出
outputs = model.generate(inputs, attention_mask=attention_mask, pad_token_id=tokenizer.eos_token_id, max_new_tokens=50)
decoded_output = tokenizer.decode(outputs[0], skip_special_tokens=True)print(decoded_output)

1、本次加载starcoder2-7b模型,使用单个gpu加载,大约使用内容为28-29GB左右,这里没有使用量化等手段去优化内存使用。

2、使用nvidia-smi命令查看gpu的相关信息

待补全补全的原文

    public U createFactory(T source) {Supplier<U> tSupplier = SERVICE_MAP.get(source);if (Objects.nonNull(tSupplier)) {return tSupplier.get();}log.info("not found ServiceFactoryTemplate service, type == {}", getUClass());

模型补全内容

    public U createFactory(T source) {Supplier<U> tSupplier = SERVICE_MAP.get(source);if (Objects.nonNull(tSupplier)) {return tSupplier.get();}log.info("not found ServiceFactoryTemplate service, type == {}", getUClass());return null;}public Class<U> getUClass() {return uClass;}public void setUClass(Class<U> uClass) {this.uClass = uClass;}

更多惊喜

除了这些顶级的面试资料,我们的公众号还将定期分享:

  • 最新互联网资讯:让你时刻掌握行业动态。
  • AI前沿新闻:紧跟技术潮流,不断提升自我。
  • 技术分享与职业发展:助你在职业生涯中走得更远、更稳。
  • 程序员生活趣事:让你在忙碌的工作之余找到共鸣与乐趣。

敬请关注【程序员世杰】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/30924.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

react实现窗口悬浮框,可拖拽、折叠、滚动

1、效果如下 2、如下两个文件不需要修改 drag.js import React from "react"; import PropTypes from "prop-types";export default class DragM extends React.Component {static propTypes {children: PropTypes.element.isRequired};static defaultP…

Linux系统之配置Nginx反向代理

Linux系统之配置Nginx反向代理 一、Nginx介绍1.1 Nginx简介1.2 Nginx反向代理二、本次实践介绍2.1 本次实践简介2.2 本次实践环境规划三、基于端口配置反向代理3.1 安装nginx软件3.2 备份配置文件3.3 编辑nginx配置文件3.4 启动Nginx服务3.5 检查Nginx服务状态3.6 设置防火墙和…

Python - 各种计算器合集【附源码】

计算器合集 一&#xff1a;极简版计算器二&#xff1a;简易版计算器三&#xff1a;不简易的计算器四&#xff1a;还可以计算器 一&#xff1a;极简版计算器 运行效果&#xff1a; import tkinter as tk import tkinter.messagebox win tk.Tk() win.title("计算器")…

【AIOps】基于AIOps的故障根因分析及定位

基础知识&#xff1a; 基于机器学习的异常检测与分析技术 传统做法&#xff1a; 复杂运维场景下&#xff0c;如何实现分钟级的故障根因定位 结合大模型&#xff1a; 基于大语言模型的云故障根因分析&#xff5c;顶会EuroSys24论文

Faiss:选择合适的索引Index

向量相似性搜索彻底改变了搜索领域。它允许我们高效地检索从GIF到文章等各种媒体&#xff0c;即使在处理十亿级别数据集时&#xff0c;也能在亚秒级时间内提供令人印象深刻的准确性。 然而&#xff0c;这种灵活性也带来了一个问题&#xff1a;如何知道哪种索引大小最适合我们的…

EE trade:现货黄金交易时间与操作技巧

现货黄金作为当今最为热门的投资方式之一&#xff0c;其独特的交易机制和高收益潜力吸引了大量投资者的关注。对于新手投资者而言&#xff0c;可能对于现货黄金交易完全是一片空白。因此&#xff0c;了解现货黄金的交易时间和操作技巧、掌握基本投资知识&#xff0c;是至关重要…

AI在创造与毁灭之间摇摆:音乐产业的机遇与挑战并存

AI到底在创造还是毁掉音乐&#xff1f; 最近一个月&#xff0c;轮番上线的音乐大模型&#xff0c;一举将素人生产音乐的门槛降到了最低&#xff0c;并掀起了音乐圈会不会被AI彻底颠覆的讨论。短暂的兴奋后&#xff0c;AI产品的版权归属于谁&#xff0c;创意产业要如何在AI的阴…

opencv的RGB 颜色表

RGB&#xff08;255,23,140&#xff09;是光的三原色&#xff0c;也即是红绿蓝Red&#xff0c;Green&#xff0c;Blue&#xff0c;它们的最大值是255&#xff0c;相当于100%。 白色&#xff1a;rgb(255,255,255) 黑色&#xff1a;rgb(0,0,0) 红色&#xff1a;rgb(255,0,0) …

python数据分析:修改数据

在 Python 中进行数据分析时&#xff0c;通常使用 pandas 库来处理和修改数据。以下是一个完整的示例&#xff0c;展示如何使用 pandas 库读取数据、修改数据并保存结果。 1. 安装并导入必要的库 首先&#xff0c;确保你已经安装了 pandas 库。如果没有安装&#xff0c;可以使…

【Spine学习13】之 制作受击动画思路总结(叠加颜色特效发光效果)

绑定IK腿部骨骼容易出错的一种方式&#xff0c; 要记住 如果按照错误方式绑定骨骼&#xff0c;可能移动IK约束的时候会另腿部的弯曲方向相反了 &#xff1a; 上节分享了攻击动作的制作思路总结&#xff0c; 这节总结受击思路。 第一步&#xff1a; 创建一个新的动画&#xff1…

【数学建模】——【新手小白到国奖选手】——【学习路线】

专栏&#xff1a;数学建模学习笔记 目录 ​编辑 第一阶段&#xff1a;基础知识和工具 1.Python基础 1.学习内容 1.基本语法 2.函数和模块 3.面向对象编程 4.文件操作 2.推荐资源 书籍&#xff1a; 在线课程&#xff1a; 在线教程&#xff1a; 2.数学基础 1.学习内…

热门开源项目

当谈到热门的开源项目时&#xff0c;选择总是取决于你的兴趣和技术栈。以下是一些广受欢迎和活跃的开源项目&#xff0c;涵盖了不同的领域和技术&#xff1a; React: GitHub 地址: GitHub - facebook/react: The library for web and native user interfaces.描述: 由 Facebook…

智能猫砂盆是养猫必需品吗?三个好用品牌让你实现铲屎自动化!

随着现代社会的快节奏和压力增大&#xff0c;许多人开始因工作、旅行或其他紧急情况需要暂时离家&#xff0c;但这样的话&#xff0c;大家又要如何确保猫咪的猫砂盆在无人照料的情况下依旧保持清洁&#xff1f;尤其在炎热的季节&#xff0c;猫砂盆若长时间未得到清理&#xff0…

Effective C++ 改善程序与设计的55个具体做法笔记与心得 4

四. 设计与声明 18. 让接口容易被正确使用&#xff0c;不易被误用 请记住&#xff1a; 好的接口很容易被正确使用&#xff0c;不容易被误用。你应该在你的所有接口中努力达成这些性质“促进正确使用”的办法包括接口的一致性&#xff0c;以及与内置类型的行为兼容。“阻止误…

ENVI实战—一文搞定监督分类

实验1&#xff1a;利用ROI建立样本训练集和验证集 目的&#xff1a;学会利用ROI建立计算机分类时的样本集 过程&#xff1a; ①导入影像&#xff1a;打开ENVI&#xff0c;选择“打开→打开为→光学传感器→ESA→Sentinel-2”&#xff0c;将Sentinel-2影像导入到ENVI平台中。…

6.20学习总结

D - 刻录光盘https://vjudge.net/problem/%E6%B4%9B%E8%B0%B7-P2835 思路&#xff1a; 利用并查集和弗洛伊德&#xff0c;对需要传递的对象都进行标记&#xff0c;经过处理后使他们的父亲发生相应的改变&#xff0c;最后对数组进行查询累加即可 代码&#xff1a; #include<…

uni-app的uni-list列表组件高效使用举例 (仿知乎日报实现)

目录 前言 uni-list组件介绍 基本使用 高级配置与自定义 仿知乎日报实现 知乎的api接口 后台服务实现 知乎日报首页 轮播图界面实现 客户端接口实现 uni-list列表使用 插入日期分割线 下滑分页的实现 完整页面代码 其他资源 前言 在移动应用开发领域&#xff0…

chatgpt: linux 下用纯c 编写ui

在Linux下用纯C语言编写用户界面&#xff08;UI&#xff09;&#xff0c;通常会使用GTK或Xlib。GTK是一个更高级的库&#xff0c;提供了丰富的控件和功能&#xff0c;而Xlib则是一个更底层的库&#xff0c;提供了直接操作X Window系统的功能。 下面是一个使用GTK在Linux上创建…

1.3自然语言的分布式表示-word2vec

文章目录 0基于计数的方法的问题1什么是基于推理的方法2神经网络中单词的表示2.1 MatMul 层的实现 3简单word2vec的实现3.1 CBOW模型的结构3.1.1神经元视角3.1.2层的视角3.1.3多层共享权重时存在的问题 3.2 CBOW模型的学习3.3单词的分布式表示 代码都位于&#xff1a;nlp&#…

【机器学习 复习】第4章 决策树算法(重点)

一、概念 1.原理看图&#xff0c;非常简单&#xff1a; &#xff08;1&#xff09;蓝的是节点&#xff0c;白的是分支&#xff08;条件&#xff0c;或者说是特征&#xff0c;属性&#xff0c;也可以直接写线上&#xff0c;看题目有没有要求&#xff09;&#xff0c; &#xff…