วันนี้ เรารู้สึกตื่นเต้นที่จะได้เปิดซอร์สซีรีส์ Qwen2.5-Coder "ทรงพลัง" "หลากหลาย" และ "ใช้งานได้จริง" (เดิมชื่อ CodeQwen1.5) ซึ่งอุทิศให้กับการส่งเสริมการพัฒนา Open CodeLLM อย่างต่อเนื่อง
ทรงพลัง: Qwen2.5-Coder-32B-Instruct กลายเป็นโมเดลโค้ดโอเพ่นซอร์ส SOTA ในปัจจุบัน ซึ่งตรงกับความสามารถในการเขียนโค้ดของ GPT-4o ในขณะที่แสดงให้เห็นถึงความสามารถในการเขียนโค้ดที่แข็งแกร่งและครอบคลุม แต่ก็ยังมีทักษะทั่วไปและคณิตศาสตร์ที่ดีอีกด้วย
ความหลากหลาย: ต่อยอดจาก 1.5B / 7B ที่เป็นโอเพ่นซอร์สก่อนหน้านี้ 2 ขนาด โดยนำเสนอรุ่น 4 ขนาด รวมถึง 0.5B / 3B / 14B / 32B ณ ตอนนี้ Qwen2.5-Coder ได้ครอบคลุมโมเดลหลักหกขนาดเพื่อตอบสนองความต้องการของนักพัฒนาที่แตกต่างกัน
- ใช้งานได้จริง: เราสำรวจการใช้งานจริงของ Qwen2.5-Coder ในสองสถานการณ์ รวมถึงผู้ช่วยโค้ดและ Artifact โดยมีตัวอย่างบางส่วนที่จัดแสดงการใช้งานที่เป็นไปได้ของ Qwen2.5-Coder ในสถานการณ์จริง
รองรับการทำความเข้าใจบริบทที่ยาวนานและการสร้างด้วยความยาวบริบทของโทเค็น 128,000 รายการ
รองรับภาษาการเขียนโค้ด 92 ภาษา
['ada', 'agda', 'alloy', 'antlr', 'applescript', 'assembly', 'augeas', 'awk', 'batchfile', 'bluespec', 'c', 'c#', 'c++', 'clojure', 'cmake', 'coffeescript', 'common-lisp', 'css', 'cuda', 'dart', 'dockerfile', 'elixir', 'elm', 'emacs-lisp', 'erlang', 'f#', 'fortran', 'glsl', 'go', 'groovy', 'haskell', 'html', 'idris', 'isabelle', 'java', 'java-server-pages', 'javascript', 'json', 'julia', 'jupyter-notebook', 'kotlin', 'lean', 'literate-agda', 'literate-coffeescript', 'literate-haskell', 'lua', 'makefile', 'maple', 'markdown', 'mathematica', 'matlab', 'objectc++', 'ocaml', 'pascal', 'perl', 'php', 'powershell', 'prolog', 'protocol-buffer', 'python', 'r', 'racket', 'restructuredtext', 'rmarkdown', 'ruby', 'rust', 'sas', 'scala', 'scheme', 'shell', 'smalltalk', 'solidity', 'sparql', 'sql', 'stan', 'standard-ml', 'stata', 'swift', 'systemverilog', 'tcl', 'tcsh', 'tex', 'thrift', 'typescript', 'verilog', 'vhdl', 'visual-basic', 'vue', 'xslt', 'yacc', 'yaml', 'zig']
รักษาจุดแข็งในด้านคณิตศาสตร์และความสามารถทั่วไปจากแบบจำลองพื้นฐาน
สำคัญ
เราอัปเดตทั้งโทเค็นพิเศษและรหัสโทเค็นที่เกี่ยวข้อง เพื่อรักษาความสอดคล้องกับ Qwen2.5 โทเค็นพิเศษใหม่มีดังต่อไปนี้:
{ "<|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 | กอดหน้า • ModelScope |
Qwen2.5-Coder-1.5B | ฐาน | 32k | กอดหน้า • ModelScope |
Qwen2.5-Coder-3B | ฐาน | 32k | กอดหน้า • ModelScope |
Qwen2.5-Coder-7B | ฐาน | 128k | กอดหน้า • ModelScope |
Qwen2.5-Coder-14B | ฐาน | 128k | กอดหน้า • ModelScope |
Qwen2.5-Coder-32B | ฐาน | 128k | กอดหน้า • ModelScope |
Qwen2.5-Coder-0.5B-สั่งสอน | สั่งสอน | 32k | กอดหน้า • ModelScope |
Qwen2.5-Coder-1.5B-สั่งสอน | สั่งสอน | 32k | กอดหน้า • ModelScope |
Qwen2.5-Coder-3B-สั่งสอน | สั่งสอน | 32k | กอดหน้า • ModelScope |
Qwen2.5-Coder-7B-สั่งสอน | สั่งสอน | 128k | กอดหน้า • ModelScope |
Qwen2.5-Coder-14B-สั่งสอน | สั่งสอน | 128k | กอดหน้า • ModelScope |
Qwen2.5-Coder-32B-สั่งสอน | สั่งสอน | 128k | กอดหน้า • ModelScope |
Qwen2.5-Coder-0.5B-สั่ง-AWQ | สั่งสอน | 32k | กอดหน้า • ModelScope |
Qwen2.5-Coder-0.5B-สั่ง-GGUF | สั่งสอน | 32k | กอดหน้า • ModelScope |
Qwen2.5-Coder-0.5B-Instruct-GPTQ-Int4 | สั่งสอน | 32k | กอดหน้า • ModelScope |
Qwen2.5-Coder-0.5B-Instruct-GPTQ-Int8 | สั่งสอน | 32k | กอดหน้า • ModelScope |
Qwen2.5-Coder-1.5B-สั่ง-AWQ | สั่งสอน | 32k | กอดหน้า • ModelScope |
Qwen2.5-Coder-1.5B-สั่ง-GGUF | สั่งสอน | 32k | กอดหน้า • ModelScope |
Qwen2.5-Coder-1.5B-Instruct-GPTQ-Int4 | สั่งสอน | 32k | กอดหน้า • ModelScope |
Qwen2.5-Coder-1.5B-Instruct-GPTQ-Int8 | สั่งสอน | 32k | กอดหน้า • ModelScope |
Qwen2.5-Coder-3B-สั่ง-AWQ | สั่งสอน | 32k | กอดหน้า • ModelScope |
Qwen2.5-Coder-3B-Instruct-GGUF | สั่งสอน | 32k | กอดหน้า • ModelScope |
Qwen2.5-Coder-3B-Instruct-GPTQ-Int4 | สั่งสอน | 32k | กอดหน้า • ModelScope |
Qwen2.5-Coder-3B-Instruct-GPTQ-Int8 | สั่งสอน | 32k | กอดหน้า • ModelScope |
Qwen2.5-Coder-7B-สั่ง-AWQ | สั่งสอน | 128k | กอดหน้า • ModelScope |
Qwen2.5-Coder-7B-สั่ง-GGUF | สั่งสอน | 128k | กอดหน้า • ModelScope |
Qwen2.5-Coder-7B-Instruct-GPTQ-Int4 | สั่งสอน | 128k | กอดหน้า • ModelScope |
Qwen2.5-Coder-7B-Instruct-GPTQ-Int8 | สั่งสอน | 128k | กอดหน้า • ModelScope |
Qwen2.5-Coder-14B-สั่ง-AWQ | สั่งสอน | 128k | กอดหน้า • ModelScope |
Qwen2.5-Coder-14B-สั่ง-GGUF | สั่งสอน | 128k | กอดหน้า • ModelScope |
Qwen2.5-Coder-14B-Instruct-GPTQ-Int4 | สั่งสอน | 128k | กอดหน้า • ModelScope |
Qwen2.5-Coder-14B-Instruct-GPTQ-Int8 | สั่งสอน | 128k | กอดหน้า • ModelScope |
Qwen2.5-Coder-32B-สั่ง-AWQ | สั่งสอน | 128k | กอดหน้า • ModelScope |
Qwen2.5-Coder-32B-สั่ง-GGUF | สั่งสอน | 128k | กอดหน้า • ModelScope |
Qwen2.5-Coder-32B-Instruct-GPTQ-Int4 | สั่งสอน | 128k | กอดหน้า • ModelScope |
Qwen2.5-Coder-32B-Instruct-GPTQ-Int8 | สั่งสอน | 128k | กอดหน้า • ModelScope |
รายละเอียดประสิทธิภาพและการแนะนำแสดงอยู่ในนี้ ? บล็อก
python>=3.9
transformers>4.37.0
สำหรับรุ่นหนาแน่น Qwen2.5
คำเตือน
นี่เป็นสิ่งจำเป็นเพราะ `transformers` รวมโค้ด Qwen2 ไว้ตั้งแต่ `4.37.0`
คุณสามารถติดตั้งแพ็คเกจที่จำเป็นด้วยคำสั่งต่อไปนี้:
pip ติดตั้ง -r ข้อกำหนด.txt
สำคัญ
Qwen2.5-Coder-[0.5-32]B-Instrcut เป็นโมเดลคำสั่งสำหรับการสนทนา
Qwen2.5-Coder-[0.5-32]B เป็นโมเดลพื้นฐานที่โดยทั่วไปใช้สำหรับการสร้างเสร็จสมบูรณ์ โดยทำหน้าที่เป็นจุดเริ่มต้นที่ดีกว่าสำหรับการปรับแต่งอย่างละเอียด
คุณสามารถเขียนโค้ดหลายบรรทัดด้วย transformers
เพื่อแชทกับ Qwen2.5-Coder-32B-Instruct โดยพื้นฐานแล้ว เราสร้างโทเค็นไนเซอร์และโมเดลด้วยเมธอด from_pretrained
และเราใช้วิธีการสร้างเพื่อดำเนินการแชทด้วยความช่วยเหลือของเทมเพลตแชทที่โทเคนไนเซอร์มอบให้ ด้านล่างนี้เป็นตัวอย่างวิธีการแชทกับ Qwen2.5-Coder-32B-Instruct:
จากหม้อแปลงนำเข้า AutoModelForCausalLM, AutoTokenizermodel_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 = "เขียนอัลกอริธึมการเรียงลำดับอย่างรวดเร็ว"ข้อความ = [ {"role": "system", "content": "คุณคือ Qwen ที่สร้างโดย Alibaba Cloud คุณเป็นผู้ช่วยที่เป็นประโยชน์"}, {"บทบาท": "ผู้ใช้", "เนื้อหา": พรอมต์} ]text = tokenizer.apply_chat_template(messages,tokenize=False,add_รุ่น_prompt=True)model_inputs = tokenizer([text], return_tensors="pt").to(model.device)generated_ids = model.generate(**model_inputs,max_new_tokens= 512)สร้าง_ids = [output_ids[len(input_ids):] สำหรับ input_ids, output_ids ใน zip(model_inputs.input_ids, สร้าง_ids) ] การตอบสนอง = tokenizer.batch_decode (generated_ids,skip_special_tokens=True)[0]
ฟังก์ชัน apply_chat_template()
ใช้เพื่อแปลงข้อความเป็นรูปแบบที่โมเดลสามารถเข้าใจได้ อาร์กิวเมนต์ add_generation_prompt
ใช้เพื่อเพิ่มพร้อมต์การสร้าง ซึ่งอ้างถึง <|im_start|>assistantn
ไปยังอินพุต โดยเฉพาะอย่างยิ่ง เราใช้เทมเพลต ChatML สำหรับโมเดลการแชทตามแนวทางปฏิบัติก่อนหน้านี้ อาร์กิวเมนต์ max_new_tokens
ใช้เพื่อกำหนดความยาวสูงสุดของการตอบสนอง ฟังก์ชัน tokenizer.batch_decode()
ใช้เพื่อถอดรหัสการตอบสนอง ในแง่ของอินพุต ข้อความข้างต้นเป็นตัวอย่างเพื่อแสดงวิธีจัดรูปแบบประวัติกล่องโต้ตอบและพร้อมท์ของระบบ คุณสามารถใช้โมเดลคำสั่งขนาดอื่นในลักษณะเดียวกันได้
โมเดลจะกรอกข้อมูลโค้ดให้สมบูรณ์ตามข้อความแจ้งที่ให้ไว้ โดยไม่มีการจัดรูปแบบเพิ่มเติม ซึ่งโดยปกติจะเรียกว่าเป็นการ code completion
ในงานสร้างโค้ด
โดยพื้นฐานแล้ว เราสร้างโทเค็นไนเซอร์และโมเดลด้วยเมธอด from_pretrained
และเราใช้วิธีการสร้างเพื่อดำเนินการโค้ดให้สมบูรณ์ ด้านล่างนี้เป็นตัวอย่างวิธีการแชทกับ Qwen2.5-Coder-32B:
จากหม้อแปลงนำเข้า AutoTokenizer, AutoModelForCausalLMdevice = "cuda" # อุปกรณ์ที่จะโหลดโมเดลลงบน # ตอนนี้คุณไม่จำเป็นต้องเพิ่ม "trust_remote_code=True"TOKENIZER = AutoTokenizer.from_pretrained("Qwen/Qwen2.5-Coder-32B")MODEL = AutoModelForCausalLM.from_pretrained("Qwen/Qwen2.5-Coder-32B", device_map="auto").eval()# โทเค็นอินพุตลงใน tokensinput_text = "#write อัลกอริธึมการเรียงลำดับอย่างรวดเร็ว"model_inputs = TOKENIZER([input_text], return_tensors ="pt").to(device)# ใช้ `max_new_tokens` เพื่อควบคุมเอาต์พุตสูงสุด length.generated_ids = MODEL.generate(model_inputs.input_ids, max_new_tokens=512, do_sample=False)[0]# Generated_ids รวมถึง prompt_ids ดังนั้นเราจำเป็นต้องถอดรหัสโทเค็นหลังจาก prompt_ids.output_text = TOKENIZER.decode(generated_ids[len( model_inputs.input_ids[0]):], skid_special_tokens=True)print(f"พร้อมท์: {input_text}nnข้อความที่สร้าง: {output_text}")
อาร์กิวเมนต์ max_new_tokens
ใช้เพื่อกำหนดความยาวสูงสุดของการตอบสนอง input_text
อาจเป็นข้อความใดก็ได้ที่คุณต้องการให้โมเดลดำเนินการต่อ
config.json
ปัจจุบันได้รับการตั้งค่าสำหรับความยาวบริบทสูงสุด 32,768 โทเค็น ในการจัดการอินพุตจำนวนมากที่เกิน 32,768 โทเค็น เราใช้ YaRN ซึ่งเป็นเทคนิคในการปรับปรุงการประมาณค่าความยาวของโมเดล เพื่อให้มั่นใจถึงประสิทธิภาพสูงสุดสำหรับข้อความที่ยาว
สำหรับเฟรมเวิร์กที่รองรับ คุณสามารถเพิ่มสิ่งต่อไปนี้ใน config.json
เพื่อเปิดใช้งาน YaRN:
- "rope_scaling": {"ปัจจัย": 4.0,"Original_max_position_embeddings": 32768,"type": "เส้นด้าย" - -
งานการแทรกโค้ดหรือที่เรียกว่าความท้าทาย "การเติมตรงกลาง" จำเป็นต้องมีการแทรกส่วนของโค้ดในลักษณะที่เชื่อมช่องว่างภายในบริบทของโค้ดที่กำหนด สำหรับแนวทางที่สอดคล้องกับแนวทางปฏิบัติที่ดีที่สุด เราขอแนะนำให้ปฏิบัติตามหลักเกณฑ์การจัดรูปแบบที่ระบุไว้ในรายงาน "Efficient Training of Language Models to Fill in the Middle""[arxiv] สิ่งนี้เกี่ยวข้องกับการใช้โทเค็นพิเศษสามรายการ <fim_prefix>
, <fim_suffix>
และ <fim_middle>
เพื่อแสดงส่วนที่เกี่ยวข้องของโครงสร้างโค้ด พรอมต์ควรมีโครงสร้างดังนี้:
prompt = '<|fim_prefix|>' + prefix_code + '<|fim_suffix|>' + suffix_code + '<|fim_middle|>'
ตามแนวทางที่กล่าวมา ตัวอย่างจะถูกจัดโครงสร้างในลักษณะนี้:
จากหม้อแปลงนำเข้า AutoTokenizer, AutoModelForCausalLM# load modeldevice = "cuda" # อุปกรณ์ที่จะโหลดโมเดลเข้าสู่ TOKENIZER = AutoTokenizer.from_pretrained("Qwen/Qwen2.5-Coder-32B")MODEL = AutoModelForCausalLM.from_pretrained("Qwen/Qwen2.5 -โคเดอร์-32B", device_map="auto").eval()input_text = """<|fim_prefix|>def quicksort(arr): ถ้า 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] ส่งคืน Quicksort(ซ้าย) + middle + Quicksort(right)<|fim_middle|>"""model_inputs = TOKENIZER([input_text], return_tensors="pt").to(device)# ใช้ `max_new_tokens` เพื่อควบคุมความยาวเอาต์พุตสูงสุด.generated_ids = MODEL.generate (model_inputs.input_ids, max_new_tokens=512, do_sample=False)[0]# Generated_ids รวม prompt_ids เราจำเป็นต้องถอดรหัสโทเค็นหลังจาก prompt_ids.output_text = TOKENIZER.decode(generated_ids[len(model_inputs.input_ids[0]):], skid_special_tokens=True)print(f "พร้อมท์: {input_text}nnข้อความที่สร้าง: {output_text}")
งานเติมโค้ดระดับพื้นที่เก็บข้อมูลให้สมบูรณ์เกี่ยวข้องกับการป้อนเนื้อหาของไฟล์หลายไฟล์จากพื้นที่เก็บข้อมูลเดียวกันให้กับโมเดล ซึ่งช่วยให้โมเดลเข้าใจความสัมพันธ์ระหว่างการเรียกต่างๆ ภายในไฟล์เหล่านี้ ซึ่งจะช่วยอำนวยความสะดวกในการทำให้เนื้อหาโค้ดเสร็จสมบูรณ์ เราขอแนะนำให้ใช้โทเค็นพิเศษทั้งสอง <|repo_name|>
และ <|file_sep|>
เพื่อระบุโครงสร้างที่เก็บ ตัวอย่างเช่น สมมติว่าชื่อที่เก็บถูกเก็บไว้ใน repo_name
และมีไฟล์ที่มีพาธและเนื้อหาที่เกี่ยวข้องซึ่งแสดงเป็น [( file_path1
, file_content1
), ( file_path2
, file_content2
)] รูปแบบของพรอมต์อินพุตสุดท้ายจะเป็นดังนี้:
input_text = f''''<|repo_name|>{repo_name}<|file_sep|>{file_path1} {file_content1}<|file_sep|>{file_path2} {file_content2}'''
จากหม้อแปลงนำเข้า AutoTokenizer, AutoModelForCausalLMdevice = "cuda" # อุปกรณ์ที่จะโหลดโมเดลลงบน # ตอนนี้คุณไม่จำเป็นต้องเพิ่ม "trust_remote_code=True"TOKENIZER = AutoTokenizer.from_pretrained("Qwen/Qwen2.5-Coder-32B")MODEL = AutoModelForCausalLM.from_pretrained("Qwen/Qwen2.5-Coder-32B", device_map="auto").eval()# โทเค็นอินพุตลงใน tokensinput_text = """<|repo_name|>library-system<|file_sep|>library .pyclass หนังสือ: def __init__(ตนเอง, ชื่อ, ผู้แต่ง, isbn, สำเนา): self.title = title self.author = ผู้เขียน self.isbn = isbn self.copies = สำเนา def __str__(self): return f"หัวข้อ: {self.title} ผู้แต่ง: {self.author}, ISBN: {self.isbn}, สำเนา: {self.copies }"class Library: def __init__(self): self.books = [] def add_book(self, title, author, isbn, copy): book = Book(title, author, isbn, สำเนา) self.books.append(book) def find_book(self, isbn): สำหรับหนังสือใน self.books: if book.isbn == isbn: คืนหนังสือคืนไม่มี def list_books(self): return self.books< |file_sep|>student.pyclass นักเรียน: def __init__(ตนเอง, ชื่อ, id): self.name = ชื่อ self.id = id self.borrowed_books = [] defยืม_book(ตนเอง หนังสือ ห้องสมุด): ถ้าหนังสือและ book.copies > 0: self.borrowed_books.append(หนังสือ) book.copies -= 1 กลับ True return เท็จ def return_book(ตนเอง หนังสือ ห้องสมุด): ถ้า หนังสือใน self.borrowed_books: self.borrowed_books.remove(book) book.copies += 1 return True return False<|file_sep|>main.pyfrom Library import Libraryfrom Student import Studentdef main(): # ตั้งค่าห้องสมุดด้วยหนังสือบางเล่ม ห้องสมุด = Library() Library.add_book("The Great Gatsby", "F. Scott Fitzgerald", "1234567890", 3) Library.add_book("To Kill a Mockingbird", "Harper Lee", "1234567891", 2) # ตั้งค่านักเรียน นักเรียน = Student("Alice", "S1") # นักเรียนยืมหนังสือ"""model_inputs = TOKENIZER([input_text], return_tensors="pt").to(device)# ใช้ `max_new_tokens` เพื่อควบคุมความยาวเอาต์พุตสูงสุด.generated_ids = MODEL.generate(model_inputs.input_ids, max_new_tokens=1024, do_sample=False)[0]# Generated_ids รวมถึง prompt_ids, ดังนั้นเราจึงต้องถอดรหัสโทเค็นหลังจาก prompt_ids.output_text = เท่านั้น TOKENIZER.decode(generated_ids[len(model_inputs.input_ids[0]):], skid_special_tokens=True)print(f"พร้อมท์: n{input_text}nnข้อความที่สร้าง: n{output_text}")
ผลลัพธ์ที่คาดหวังดังต่อไปนี้:
ข้อความที่สร้าง:book = Library.find_book("1234567890")ถ้า Student.borrow_book(book, Library):print(f"{student.name} ยืม {book.title}")else:print(f"{student.name } ไม่สามารถยืม {book.title}") # นักเรียนคืนหนังสือถ้า Student.return_book(หนังสือ, ห้องสมุด):print(f"{student.name} คืน {book.title}")else:print(f"{student.name} ไม่สามารถส่งคืน {book.title}") # แสดงรายการหนังสือทั้งหมดในห้องสมุดprint("หนังสือทั้งหมดในห้องสมุด:") สำหรับหนังสือในห้องสมุด list_books():พิมพ์(หนังสือ)ถ้า __name__ == "__main__":main()
ในฐานะสมาชิกในครอบครัวของ Qwen2.5 Qwen2.5-Coder ได้รับการสนับสนุนโดย vLLM บทช่วยสอนแบบละเอียดสามารถพบได้ในบทช่วยสอนของ Qwen ที่นี่ เราจะให้ตัวอย่างง่ายๆ ของการอนุมานแบบแบตช์แบบออฟไลน์ใน vLLM
จากหม้อแปลงนำเข้า AutoTokenizer จาก vllm นำเข้า LLM, SamplingParams# เริ่มต้น tokenizertokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen2.5-Coder-32B")# ส่งผ่านไฮเปอร์พารามิเตอร์การถอดรหัสเริ่มต้นของ Qwen1.5-32B-Chat# max_tokens นั้นมีค่าสูงสุด ความยาวสำหรับ generation.sampling_params = SamplingParams(temperature=0.7, top_p=0.8, repetition_penalty=1.05, max_tokens=1024)# ป้อนชื่อรุ่นหรือพาธ สามารถเป็น GPTQ หรือ AWQ models.llm = LLM(model="Qwen/Qwen2.5-Coder-32B")# เตรียม promptsprompt = "#write a quick sort Algorithm.ndef quick_sort("# create outputsoutputs = llm.generate( [prompt], sampling_params)# พิมพ์เอาต์พุตสำหรับเอาต์พุตในเอาต์พุต:prompt = output.promptgenerated_text = output.outputs[0].textprint(f"พร้อมท์: {พร้อมท์!r} ข้อความที่สร้าง: {generated_text!r}")
หากต้องการขยายปริมาณการรับส่งข้อมูล การให้บริการแบบกระจายจะช่วยคุณโดยใช้ประโยชน์จากอุปกรณ์ GPU มากขึ้น เมื่อใช้ลำดับที่ยาวเป็นพิเศษในการอนุมาน อาจทำให้หน่วยความจำ GPU ไม่เพียงพอ ที่นี่ เราจะสาธิตวิธีการรัน Qwen2.5-Coder-32B ด้วยความขนานของเทนเซอร์เพียงแค่ส่งผ่านอาร์กิวเมนต์ tensor_parallel_size
llm = LLM(model="Qwen/Qwen2.5-Coder-32B", tensor_parallel_size=8)
นอกจากนี้เรายังมีอินเทอร์เฟซ Gradio เพื่อประสบการณ์ที่ดียิ่งขึ้น เพียงดำเนินการโดย:
cd demo/chatbot/# สำหรับผู้ใช้ Linux และ Windows (และ macOS ที่มี Intel??)python app.py # สำหรับ macOS ที่ใช้ผู้ใช้ Apple Silicon Intel ไม่รองรับ ซึ่งอาจช้ากว่า RTX 4090PYTORCH_ENABLE_MPS_FALLBACK=1 python app.py ถึง 20 เท่า
นอกจากนี้เรายังมีอินเทอร์เฟซ Gradio ของโหมดสิ่งประดิษฐ์:
ซีดีสาธิต/สิ่งประดิษฐ์/ หลาม app.py
คุณสามารถระบุอาร์กิวเมนต์ --server_port
, --share
, --server_name
เพื่อตอบสนองความต้องการของคุณ!
หรือลองใช้ HuggingFace ได้อย่างง่ายดาย: 「สาธิตแชทบอท」 ? 「การสาธิตสิ่งประดิษฐ์」
สำหรับข้อมูลเพิ่มเติม โปรดดูรายงานทางเทคนิคของ Qwen2.5-Coder
หากคุณพบว่างานของเรามีประโยชน์ โปรดอ้างอิงข้อมูลให้เราด้วย
@article{hui2024qwen2, title={Qwen2. 5-Coder Technical Report} ผู้แต่ง={Hui, Binyuan และ Yang, Jian และ Cui, Zeyu และ Yang, Jiaxi และ Liu, Dayiheng และ Zhang, Lei และ Liu, Tianyu และ Zhang, Jiajun และ Yu, Bowen และ Dang, Kai และ อื่นๆ}, Journal={arXiv พิมพ์ล่วงหน้า arXiv:2409.12186}, year={2024}}@article{qwen2,title={Qwen2 Technical Report},author={An Yang และ Baosong Yang และ Binyuan Hui และ Bo Zheng และ Bowen Yu และ Chang Zhou และ Chengpeng Li และ Chengyuan Li และ Dayiheng Liu และ Fei Huang และ Guanting Dong และ Haoran Wei และ Huan Lin และ Jialong Tang และ Jialin Wang และ Jian Yang และ Jianhong Tu และ Jianwei Zhang และ Jianxin Ma และ Jin Xu และ Jingren Zhou และ Jinze Bai และ Jinzheng He และ Junyang Lin และ Kai Dang และ Keming Lu และ Keqin Chen และ Kexin Yang และ Mei Li และ Mingfeng Xue และ Na Ni และ Pei Zhang และ Peng Wang และ Ru Peng และ Rui Men และ Ruize Gao และ Runji Lin และ Shijie Wang และ Shuai Bai และ Sinan Tan และ Tianhang Zhu และ Tianhao Li และ Tianyu Liu และ Wenbin Ge และ Xiaodong Deng และ Xiaohuan Zhou และ Xingzhang Ren และ Xinyu Zhang และ Xipin Wei และ Xuancheng Ren และ Yang Fan และ Yang Yao และ Yichang Zhang และ Yu Wan และ Yunfei Chu และ Yuqiong Liu และ Zeyu Cui และ Zhenru Zhang และ Zhihao Fan},journal={arXiv preprint arXiv:2407.10671 },ปี={2024}}
หากคุณสนใจที่จะฝากข้อความถึงทีมวิจัยหรือทีมผลิตภัณฑ์ของเรา เข้าร่วมกลุ่ม Discord หรือ WeChat ของเรา!
↑ กลับไปด้านบน ↑