模型:

VMware/open-llama-7b-v2-open-instruct

英文

VMware/open-llama-7B-v2-open-instruct

已根据指令进行调整的完全训练的Open LLama 7B v2模型。该模型可供商业使用。

  • 与v1相比,该模型在代码方面表现更好,这是由openlm-research团队对基础模型的改进所致。
  • 指令模型使用改进的指令调整数据集进行训练,与v1相比有所提高。

注意:该模型使用Alpaca提示模板进行训练。注意:使用快速分词器会导致错误的编码,请在实例化分词器时将use_fast = False参数设置为false。

许可证

用于微调的数据集

Open-instruct

Open-instruct-v1

  • Mosaic/Dolly-HHRLHF + filtered OASST1 - cc by 3.0

COT SUBMIX子集(来自FLAN V2)的零样例

  • ESNLI - MIT
  • ECQA - CDLA 1.0 - Sharing
  • Strategy - MIT
  • CREAK - MIT
  • gsmk8 - MIT
  • aqua - MIT
  • qasc - Apache 2.0

命名方法

  • 模型:Open-llama-v2
  • 模型大小:7B参数
  • 数据集:Open-instruct

在Transformer中使用

import os
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer

model_name = 'VMware/open-llama-7b-v2-open-instruct'


tokenizer = AutoTokenizer.from_pretrained(model_name, use_fast=False)

model = AutoModelForCausalLM.from_pretrained(model_name, torch_dtype=torch.float16, device_map='sequential')

prompt_template = "Below is an instruction that describes a task. Write a response that appropriately completes the request.\n\n### Instruction:\n{instruction}\n\n### Response:"

prompt = """What is attention mechanism of a transformer model? 
 Write a python code to illustrate how attention works within a transformer model using numpy library. Donot use pytorch or tensorflow."""


inputt = prompt_template.format(instruction= prompt)
input_ids = tokenizer(inputt, return_tensors="pt").input_ids.to("cuda")

output1 = model.generate(input_ids, max_length=512)
input_length = input_ids.shape[1]
output1 = output1[:, input_length:]
output = tokenizer.decode(output1[0])

print(output)

输出

当然,我可以帮你做到!

变压器模型中的注意力机制通常是使用自注意力层中的注意力机制来实现的。自注意力使得模型在处理输入序列时能够集中注意力于不同的部分。这是通过计算一组注意力权重来实现的,这些权重用于对每个输入元素对输出的贡献进行加权。

下面是使用NumPy的示例代码,以说明注意力在变压器模型中的工作原理:

import numpy as np

def attention_weights(query, key, value, mask):
    # Query, key, and value are input tensors. Mask is a tensor of zeros and ones that represents the attention mask.
    # It is used to prevent the model from attending to certain positions in the input sequence if they are not relevant.
    # The attention weights are the element-wise product of the query, key, and mask tensors.
    # The result is a tensor of the same shape as the query tensor.
    
    # Compute the dot product between the query tensor and the key tensor
    dot = np.matmul(query, key)
    
    # Compute the element-wise softmax of the dot product tensor
    exp_dot = np.exp(dot)
    
    # Multiply the dot product and the softmax of the dot product tensors
    weights = dot * exp_dot
    
    # Return the attention weights as a NumPy tensor
    return weights

# Define the input sequence
query = np.array([[0.1, 0.2, 0.3], [0.4, 0.5, 0.6]])
key = np.array([[0.1, 0.2], [0.3, 0.4]])
value = np.array([[0.1, 0.2, 0.3], [0.4, 0.5, 0.6]])
mask = np.array([[False, True, True], [False, True, True]])

# Compute the attention weights
weights = attention_weights(query, key, value, mask)

# Print the attention weights
print(weights)

在此示例中,attention_weights函数接受查询张量、键张量、值张量和掩码张量作为输入。它使用np.matmul函数计算查询张量和键张量之间的点积,然后使用np.exp函数对逐元素点积张量应用softmax函数。然后,它使用np.matmul函数将点积和softmax张量相乘,并将结果作为NumPy张量返回。

查询、键和值张量表示变压器模型的输入序列。掩码张量表示注意掩码,用于防止模型关注输入序列中不相关的特定位置。

attention_weights函数的输出是一个表示输入序列的注意力权重的NumPy张量。这些权重被变压器模型用于对每个输入元素对输出的贡献进行加权。

希望对你有帮助!

微调细节

我们将在我们的 RAIL Github Repository 上提供微调脚本。

评估

待定