Привет всем, я Кошаголовый Тигр! Сегодня мы подробно рассмотрим продукты, выпущенные Alibaba Tongyi Qianwen. Qwen2.5-Coder серия, которая представляет собой мощную, богатую и практичную серию моделей генерации открытого исходного кода, особенно флагманскую версию. Qwen2.5-Coder-32B-Instruct известен как сравнимый с GPT-4o модель открытого исходного кода. 🎉 Ниже представлены подробные руководства по эксплуатации и использованию.
Серия Qwen2.5-Coder имеет в качестве основных характеристик «мощность», «богатость» и «практичность»:
{
"<|fim_prefix|>": 151659,
"<|fim_middle|>": 151660,
"<|fim_suffix|>": 151661,
"<|fim_pad|>": 151662,
"<|repo_name|>": 151663,
"<|file_sep|>": 151664,
"<|im_start|>": 151644,
"<|im_end|>": 151645
}
Название модели | тип | длина контекста | Ссылка для скачивания |
---|---|---|---|
Qwen2.5-Coder-0.5B | базовая модель | 32K | 🤗 Hugging Face • 🤖 ModelScope |
Qwen2.5-Coder-32B-Instruct | модель инструкции | 128K | 🤗 Hugging Face • 🤖 ModelScope |
Qwen2.5-Coder-14B-Instruct-AWQ | модель инструкции | 128K | 🤗 Hugging Face • 🤖 ModelScope |
Python 版本:>=3.9
Transformers Библиотека:>4.37.0
(поддерживать Qwen2.5 плотная модель)
Установите зависимости: выполните следующую команду, чтобы установить необходимые пакеты зависимостей:
pip install -r requirements.txt
Ниже показано, как использовать Qwen2.5-Coder-32B-Instruct для чата по коду:
from transformers import AutoModelForCausalLM, AutoTokenizer
model_name = "Qwen/Qwen2.5-Coder-32B-Instruct"
model = AutoModelForCausalLM.from_pretrained(model_name, torch_dtype="auto", device_map="auto")
tokenizer = AutoTokenizer.from_pretrained(model_name)
prompt = "write a quick sort algorithm."
messages = [
{"role": "system", "content": "You are Qwen, created by Alibaba Cloud. You are a helpful assistant."},
{"role": "user", "content": prompt}
]
text = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
model_inputs = tokenizer([text], return_tensors="pt").to(model.device)
generated_ids = model.generate(**model_inputs, max_new_tokens=512)
response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]
print(response)
Qwen2.5-Coder-32B можно использовать для задач завершения кода:
from transformers import AutoTokenizer, AutoModelForCausalLM
device = "cuda"
TOKENIZER = AutoTokenizer.from_pretrained("Qwen/Qwen2.5-Coder-32B")
MODEL = AutoModelForCausalLM.from_pretrained("Qwen/Qwen2.5-Coder-32B", device_map="auto").eval()
input_text = "#write a quick sort algorithm"
model_inputs = TOKENIZER([input_text], return_tensors="pt").to(device)
generated_ids = MODEL.generate(model_inputs.input_ids, max_new_tokens=512, do_sample=False)[0]
output_text = TOKENIZER.decode(generated_ids[len(model_inputs.input_ids[0]):], skip_special_tokens=True)
print(f"Prompt: {input_text}\n\nGenerated text: {output_text}")
Текущая конфигурация поддерживает 32,768 tokens издлина контекст. Доступно через config.json
включено в YaRN Технология улучшает возможности обработки длинного текста:
{
...,
"rope_scaling": {
"factor": 4.0,
"original_max_position_embeddings": 32768,
"type": "yarn"
}
}
Для задач вставки кода требуются специальные теги <|fim_prefix|>
、<|fim_suffix|>
、<|fim_middle|>
Чтобы отметить:
from transformers import AutoTokenizer, AutoModelForCausalLM
device = "cuda"
TOKENIZER = AutoTokenizer.from_pretrained("Qwen/Qwen2.5-Coder-32B")
MODEL = AutoModelForCausalLM.from_pretrained("Qwen/Qwen2.5-Coder-32B", device_map="auto").eval()
input_text = """<|fim_prefix|>def quicksort(arr):
if len(arr) <= 1:
return arr
pivot = arr[len(arr) // 2]
<|fim_suffix|>
middle = [x for x in arr if x == pivot]
right = [x for x in arr if x > pivot]
return quicksort(left) + middle + quicksort(right)<|fim_middle|>"""
model_inputs = TOKENIZER([input_text], return_tensors="pt").to(device)
generated_ids = MODEL.generate(model_inputs.input_ids, max_new_tokens=512, do_sample=False)[0]
output_text = TOKENIZER.decode(generated_ids[len(model_inputs.input_ids[0]):], skip_special_tokens=True)
print(f"Prompt: {input_text}\n\nGenerated text: {output_text}")
Использование задач завершения на уровне склада <|repo_name|>
и <|file_sep|>
Отметьте отношения между файлами. гипотеза repo_name
Имя хранилища, включая файлы file_path1
и file_path2
,Формат следующий:
input_text = f'''<|repo_name|>{repo_name}
<|file_sep|>{file_path1}
{file_content1}
<|file_sep|>{file_path2}
{file_content2}'''
Qwen2.5-Coder поддерживает автономное рассуждение vLLM:
from transformers import AutoTokenizer
from vllm import LLM, SamplingParams
tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen2.5-Coder-32B")
sampling_params = SamplingParams(temperature=0.7, top_p=0.8, repetition_penalty=1.05, max_tokens=1024)
llm = LLM(model="Qwen/Qwen2.5-Coder-32B")
prompt = "#write a quick sort algorithm.\ndef quick_sort("
outputs = llm.generate([prompt], sampling_params)
for output in outputs:
prompt = output.prompt
generated_text = output.outputs[0].text
print(f"Prompt: {prompt!r}, Generated text: {generated_text!r}")
Qwen2.5-Coder Серия Model предоставляет широкие и разнообразные возможности генерации кода, предоставляя разработчикам и исследователям гибкие инструменты. посредством гибкого API поддерживатьи Богатыйиз Модельразмер,Qwen2.5-Coder Эта серия может удовлетворить различные потребности: от простого завершения кода до сложной генерации кода.
голова кошки тигр:сосредоточиться нас, узнать больше AI Последние новости о моделях!
👉 Дополнительная информация:有任何疑问或者需要进一步探讨из内容,Добро пожаловать, нажмите на визитную карточку в конце статьи, чтобы получить ее.Дополнительная информация. Я босс. кошки тигр, с нетерпением жду общения с тобой! 🦉💬