当前位置: 首页 > news >正文

重庆企业网站推广流程潍坊网站制作小程序

重庆企业网站推广流程,潍坊网站制作小程序,网站建设几大技巧,莱芜都市论坛在过去的一年里#xff0c;大型语言模型(llm)有了飞速的发展#xff0c;在本文中#xff0c;我们将探讨几种(量化)的方式#xff0c;除此以外#xff0c;还会介绍分片及不同的保存和压缩策略。 说明#xff1a;每次加载LLM示例后#xff0c;建议清除缓存#xff0c;以…在过去的一年里大型语言模型(llm)有了飞速的发展在本文中我们将探讨几种(量化)的方式除此以外还会介绍分片及不同的保存和压缩策略。 说明每次加载LLM示例后建议清除缓存以防止出现OutOfMemory错误。 del model, tokenizer, pipeimport torchtorch.cuda.empty_cache()如果在jupyter中无法释放显存请重启这个jupyter notebook。 模型加载 加载LLM的最直接、最普通的方式是通过Transformers。HuggingFace已经创建了一个套件我们能够直接使用 pip install githttps://github.com/huggingface/transformers.gitpip install accelerate bitsandbytes xformers安装完成后我们可以使用以下管道轻松加载LLM: from torch import bfloat16from transformers import pipeline# Load in your LLM without any compression trickspipe pipeline(text-generation, modelHuggingFaceH4/zephyr-7b-beta, torch_dtypebfloat16, device_mapauto)我们这里使用zephyr-7b-beta作为示例 这种加载LLM的方法通常不会执行任何压缩技巧。我们来做个使用的示例 messages [{role: system,content: You are a friendly chatbot.,},{role: user, content: Tell me a funny joke about Large Language Models.},]prompt pipe.tokenizer.apply_chat_template(messages, tokenizeFalse, add_generation_promptTrue)使用内部提示模板生成的提示是这样构造的: 然后我们可将提示传递给LLM来生成答案: outputs pipe(prompt, max_new_tokens256, do_sampleTrue, temperature0.1, top_p0.95)print(outputs[0][generated_text])这是一个最直接的使用流程但是对于纯推理这种方法效率是最低的因为在没有任何压缩或量化策略的情况下加载整个模型。 分片 在我们进入量化策略之前我们先介绍一个前置的方法分片。通过分片可以将模型分割成小块每个分片包含模型的较小部分通过在不同设备上分配模型权重来解决GPU内存限制。 虽然它没有任何的压缩和量化但是这种方法算是一个最简单的加载大模型的方案。 比如Zephyr-7B-β实际上已经分片了!如果进入模型并点击“Files and versions”链接可以看到模型被分成了8个部分。 模型的分片非常简单可以直接使用Accelerate 包: from accelerate import Accelerator# Shard our model into pieces of 1GBaccelerator Accelerator()accelerator.save_model(modelpipe.model, save_directory/content/model, max_shard_size4GB)这样将模型分成4GB的分片 量化 大型语言模型由一堆权重和激活表示。这些值通常由通常的32位浮点(float32)数据类型表示。 比特的数量告诉你它可以表示多少个值。Float32可以表示1.18e-38和3.4e38之间的值相当多的值!比特数越少它能表示的值就越少。 如果我们选择较低的位大小那么模型就会变得不那么准确但它表示更少的值从而降低其大小和内存需求。 量化是指将LLM从其原始Float32表示转换为更小的表示。我们不希望简单地使用较小的位变体而是希望在不丢失太多信息的情况下将较大的位表示映射到较小的位。 所以一般情况下我们经常使用一种名为4bit-NormalFloat (NF4)的新格式来实现这一点。这个数据类型做了一些特殊的技巧以便有效地表示更大的位数据类型。它包括三个步骤: 归一化:将模型的权重归一化以便我们期望权重落在一定范围内。这允许更有效地表示更常见的值。 量化:将权重量化为4位。在NF4中量化级别相对于归一化权重是均匀间隔的从而有效地表示原始的32位权重。 去量化:虽然权重以4位存储但它们在计算期间被去量化从而在推理期间提高性能。 我们可以直接使用Bitsandbytes库进行量化操作 from transformers import BitsAndBytesConfigfrom torch import bfloat16# Our 4-bit configuration to load the LLM with less GPU memorybnb_config BitsAndBytesConfig(load_in_4bitTrue, # 4-bit quantizationbnb_4bit_quant_typenf4, # Normalized float 4bnb_4bit_use_double_quantTrue, # Second quantization after the firstbnb_4bit_compute_dtypebfloat16 # Computation type)上面的配置指定要使用的量化级别。比如4位量化表示权重但用16位进行推理。 然后在管道中加载模型就很简单了: from transformers import AutoTokenizer, AutoModelForCausalLM, pipeline# Zephyr with BitsAndBytes Configurationtokenizer AutoTokenizer.from_pretrained(HuggingFaceH4/zephyr-7b-alpha)model AutoModelForCausalLM.from_pretrained(HuggingFaceH4/zephyr-7b-alpha,quantization_configbnb_config,device_mapauto,)# Create a pipelinepipe pipeline(modelmodel, tokenizertokenizer, tasktext-generation)接下来使用与之前相同的提示: outputs pipe(prompt, max_new_tokens256, do_sampleTrue, temperature0.7, top_p0.95)print(outputs[0][generated_text])量化是一种强大的技术可以减少模型的内存需求同时保持性能相似。它允许更快的加载、使用和微调llm即使使用较小的gpu。 预量化(GPTQ、AWQ、GGUF) 我们已经探索了分片和量化技术。但是量化是在每次加载模型时进行的这是非常耗时的操作有没有办法直接保存量化后的模型并且在使用时直接加载呢 TheBloke是HuggingFace上的一个用户它为我们执行了一系列量化操作我想用过大模型的人一定对它非常的熟悉吧 这些量化模型包含了很多格式GPTQ、GGUF和AWQ我们来进行介绍 1、GPTQ: Post-Training Quantization for GPT Models GPTQ是一种4位量化的训练后量化(PTQ)方法主要关注GPU推理和性能。 该方法背后的思想是尝试通过最小化该权重的均方误差将所有权重压缩到4位。在推理过程中它将动态地将其权重去量化为float16以提高性能同时保持低内存。 我们需要在HuggingFace Transformers中的gptq类模型中加载: pip install optimumpip install auto-gptq --extra-index-url https://huggingface.github.io/autogptq-index/whl/cu118/然后找到需要加载的模型比如“TheBloke/zephyr-7B-beta-GPTQ”进行加载 from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline# Load LLM and Tokenizermodel_id TheBloke/zephyr-7B-beta-GPTQtokenizer AutoTokenizer.from_pretrained(model_id, use_fastTrue)model AutoModelForCausalLM.from_pretrained(model_id,device_mapauto,trust_remote_codeFalse,revisionmain)# Create a pipelinepipe pipeline(modelmodel, tokenizertokenizer, tasktext-generation)尽管我们安装了一些额外的依赖项但我们可以使用与之前相同的管道也就是是不需要修改代码这是使用GPTQ的一大好处。 GPTQ是最常用的压缩方法因为它针对GPU使用进行了优化。但是如果你的GPU无法处理如此大的模型那么从GPTQ开始切换到以cpu为中心的方法(如GGUF)是绝对值得的。 2、GPT-Generated Unified Format 尽管GPTQ在压缩方面做得很好但如果没有运行它的硬件那么就需要使用其他的方法。 GGUF(以前称为GGML)是一种量化方法允许用户使用CPU来运行LLM但也可以将其某些层加载到GPU以提高速度。 虽然使用CPU进行推理通常比使用GPU慢但对于那些在CPU或苹果设备上运行模型的人来说这是一种非常好的格式。 使用GGUF非常简单我们需要先安装ctransformers包: pip install ctransformers[cuda]然后加载模型“TheBloke/zephyr-7B-beta-GGUF” from ctransformers import AutoModelForCausalLMfrom transformers import AutoTokenizer, pipeline# Load LLM and Tokenizer# Use gpu_layers to specify how many layers will be offloaded to the GPU.model AutoModelForCausalLM.from_pretrained(TheBloke/zephyr-7B-beta-GGUF,model_filezephyr-7b-beta.Q4_K_M.gguf,model_typemistral, gpu_layers50, hfTrue)tokenizer AutoTokenizer.from_pretrained(HuggingFaceH4/zephyr-7b-beta, use_fastTrue)# Create a pipelinepipe pipeline(modelmodel, tokenizertokenizer, tasktext-generation)加载模型后我们可以运行如下提示: outputs pipe(prompt, max_new_tokens256)print(outputs[0][generated_text])如果你想同时利用CPU和GPU, GGUF是一个非常好的格式。 3、AWQ: Activation-aware Weight Quantization 除了上面两种以外一种新格式是AWQ(激活感知权重量化)它是一种类似于GPTQ的量化方法。AWQ和GPTQ作为方法有几个不同之处但最重要的是AWQ假设并非所有权重对LLM的性能都同等重要。 也就是说在量化过程中会跳过一小部分权重这有助于减轻量化损失。所以他们的论文提到了与GPTQ相比的可以由显著加速同时保持了相似的有时甚至更好的性能。 该方法还是比较新的还没有被采用到GPTQ和GGUF的程度。 对于AWQ我们将使用vLLM包: pip install vllm使用vLLM可以直接加载模型: from vllm import LLM, SamplingParams# Load the LLMsampling_params SamplingParams(temperature0.0, top_p1.0, max_tokens256)llm LLM(modelTheBloke/zephyr-7B-beta-AWQ, quantizationawq, dtypehalf, gpu_memory_utilization.95, max_model_len4096)然后使用.generate运行模型: output llm.generate(prompt, sampling_params)print(output[0].outputs[0].text)就是这样 https://avoid.overfit.cn/post/47f8871b7144405795301aa0a6bd9a24 作者Maarten Grootendorst
http://wiki.neutronadmin.com/news/139676/

相关文章:

  • 成都网站制作哪家好托里县城乡建设局网站
  • 公司网站制作都需要图片设计师互动平台
  • 聊城网站备案登录器显的窗口网站怎么做
  • 怎么封闭网站佛山新网站建设服务
  • 高端网站建设专业公司微信网站制作公司哪家好
  • 怎么创建免费的个人网站国内免费产品发布网站
  • 投资集团网站建设方案中小学生教育网站建设方案
  • 杭州教育培训网站建设湖南做网站360o
  • wordpress主机高端的网站优化公司
  • 网站开发的相关语言有哪些互联网品牌有哪些
  • win7怎么做网站wordpress ie8不兼容
  • 容易被百度收录的网站网络游戏制作软件
  • 随州网站建设安徽平台网站建设公司
  • 怎么用dw做带登陆的网站html解析wordpress
  • 企业网站推广方法有哪些?网页编程入门
  • 宁波网站建设企业网站制作保定建站服务
  • 查询网站是否备案青州网站设计
  • 档案信息网站建设工作经验2018年公司网站建设费分录
  • 如何做自己的网站链接发布网站免费空间
  • 公司建设网站流程vue Wordpress
  • 深圳外贸网站开发电商平台系统开发方案
  • 中国建设银行吉林省分行官网站c 网站开发的书籍
  • 网站建设运维策划最快网站备案
  • 京东网站优化家居定制公司股票
  • 07年做网站南靖县建设局网站
  • php手机wap网站源码wordpress指定目录为首页
  • 台州建设质量监督网站泸县城乡住房建设厅网站
  • 北京网站建设类岗位网站推广在哪些平台做外链
  • 网站制作公司哪儿济南兴田德润有活动吗模板建站是什么意思
  • 网站关键词优化公司做网站模板哪里买