Mixtral-8x7B hiện đã có sẵn trên Amazon SageMaker JumpStart

bởi Rachna Chadha, Karl Albertsen, Fabio Nonato de Paula, Ashish Khetan, Kyle Ulrich, và Christopher Whitten | vào ngày 22 tháng 12 năm 2023 |

Hôm nay, chúng tôi rất vui mừng thông báo rằng mô hình ngôn ngữ lớn (LLM) Mixtral-8x7B, được phát triển bởi Mistral AI, đã có sẵn cho khách hàng thông qua Amazon SageMaker JumpStart để triển khai chỉ với một cú nhấp chuột để chạy suy luận. Mô hình LLM Mixtral-8x7B là một mô hình hỗn hợp các chuyên gia đã được huấn luyện trước, dựa trên một lõi có 7 tỷ tham số với tám chuyên gia mỗi lớp truyền ngõ qua. Bạn có thể thử mô hình này với SageMaker JumpStart, một trung tâm học máy (ML) cung cấp quyền truy cập vào các thuật toán và mô hình để bạn có thể bắt đầu nhanh chóng với ML. Trong bài viết này, chúng tôi sẽ hướng dẫn cách khám phá và triển khai mô hình Mixtral-8x7B.

Mixtral-8x7B là gì ?

Mixtral-8x7B là một mô hình cơ sở được phát triển bởi Mistral AI, hỗ trợ văn bản tiếng Anh, tiếng Pháp, tiếng Đức, tiếng Ý và tiếng Tây Ban Nha, với khả năng tạo mã. Nó hỗ trợ một loạt các trường hợp sử dụng như tóm tắt văn bản, phân loại, hoàn thành văn bản và hoàn thành mã. Nó hoạt động tốt trong chế độ trò chuyện. Để minh họa tính linh hoạt dễ dàng của mô hình, Mistral AI cũng đã phát hành một mô hình Mixtral-8x7B-instruct cho các trường hợp sử dụng trò chuyện, được điều chỉnh tinh chỉnh bằng cách sử dụng một loạt các bộ dữ liệu trò chuyện có sẵn công khai. Các mô hình Mixtral có độ dài ngữ cảnh lớn lên đến 32.000 token.

Mixtral-8x7B cung cấp cải thiện đáng kể về hiệu suất so với các mô hình tiên tiến trước đó. Kiến trúc hỗn hợp của các chuyên gia của nó cho phép nó đạt được kết quả hiệu suất tốt hơn trên 9 trong số 12 bài kiểm tra xử lý ngôn ngữ tự nhiên (NLP) được thử nghiệm bởi Mistral AI. Mixtral khớp hoặc vượt qua hiệu suất của các mô hình lên đến 10 lần kích thước của nó. Bằng cách sử dụng chỉ một phần nhỏ các tham số cho mỗi token, nó đạt được tốc độ suy luận nhanh hơn và chi phí tính toán thấp hơn so với các mô hình dày đặc cùng kích thước — ví dụ, với tổng cộng 46,7 tỷ tham số nhưng chỉ 12,9 tỷ được sử dụng cho mỗi token. Sự kết hợp này giữa hiệu suất cao, hỗ trợ đa ngôn ngữ và hiệu suất tính toán làm cho Mixtral-8x7B trở thành một lựa chọn hấp dẫn cho các ứng dụng NLP.

Mô hình được cung cấp dưới giấy phép Apache 2.0 phong cách phóng khoáng, để sử dụng mà không có hạn chế.

SageMaker JumpStart là gì

Với SageMaker JumpStart, các chuyên gia ML có thể lựa chọn từ một danh sách ngày càng tăng các mô hình cơ sở hiệu suất tốt nhất. Các chuyên gia ML có thể triển khai các mô hình cơ sở lên các trường hợp Amazon SageMaker dành riêng trong một môi trường được cô lập mạng, và tùy chỉnh các mô hình bằng cách sử dụng SageMaker để huấn luyện và triển khai mô hình.

Bạn có thể khám phá và triển khai Mixtral-8x7B chỉ với vài cú nhấp chuột trong Amazon SageMaker Studio hoặc theo cách lập trình thông qua SDK Python SageMaker, giúp bạn có thể rút ra hiệu suất mô hình và kiểm soát MLOps với các tính năng của SageMaker như Amazon SageMaker Pipelines, Amazon SageMaker Debugger, hoặc nhật ký container. Mô hình được triển khai trong một môi trường an toàn của AWS và dưới sự kiểm soát của VPC của bạn, giúp đảm bảo an ninh dữ liệu.

Khám phá các mô hình

Bạn có thể truy cập các mô hình cơ sở Mixtral-8x7B thông qua SageMaker JumpStart trong giao diện SageMaker Studio và SDK Python SageMaker. Trong phần này, chúng tôi sẽ đi qua cách khám phá các mô hình trong SageMaker Studio.

SageMaker Studio là một môi trường phát triển tích hợp (IDE) cung cấp một giao diện trực quan dựa trên web duy nhất, nơi bạn có thể truy cập các công cụ được xây dựng mục đích để thực hiện tất cả các bước phát triển ML, từ chuẩn bị dữ liệu đến xây dựng, huấn luyện và triển khai các mô hình ML của bạn. Để biết thêm chi tiết về cách bắt đầu và cài đặt SageMaker Studio, hãy tham khảo Amazon SageMaker Studio.

Từ trang chính của SageMaker JumpStart, bạn có thể tìm kiếm “Mixtral” trong ô tìm kiếm. Bạn sẽ thấy kết quả tìm kiếm hiển thị Mixtral 8x7B và Mixtral 8x7B Instruct.

Bạn có thể chọn thẻ mô hình để xem chi tiết về mô hình như giấy phép, dữ liệu được sử dụng để huấn luyện và cách sử dụng. Bạn cũng sẽ tìm thấy nút Triển khai, mà bạn có thể sử dụng để triển khai mô hình và tạo một điểm cuối.

Triển khai một mô hình

Để triển khai một mô hình, quá trình triển khai bắt đầu khi bạn chọn Triển khai. Sau khi quá trình triển khai hoàn thành, một điểm cuối đã được tạo ra. Bạn có thể kiểm tra điểm cuối bằng cách truyền một tải trọng yêu cầu suy luận mẫu hoặc chọn tùy chọn kiểm tra của bạn bằng cách sử dụng SDK. Khi bạn chọn tùy chọn sử dụng SDK, bạn sẽ thấy mã ví dụ mà bạn có thể sử dụng trong trình chỉnh sửa notebook ưa thích của bạn trong SageMaker Studio.

Để triển khai bằng SDK, chúng ta bắt đầu bằng cách chọn mô hình Mixtral-8x7B, được chỉ định bằng model_id có giá trị huggingface-llm-mixtral-8x7b. Bạn có thể triển khai bất kỳ một trong các mô hình được chọn trên SageMaker bằng mã sau. Tương tự, bạn có thể triển khai Mixtral-8x7B Instruct bằng ID mô hình riêng của nó:

from sagemaker.jumpstart.model import JumpStartModel

model = JumpStartModel(model_id=”huggingface-llm-mixtral-8x7b”)
predictor = model.deploy()

Điều này triển khai mô hình trên SageMaker với các cấu hình mặc định, bao gồm loại instance mặc định và cấu hình VPC mặc định. Bạn có thể thay đổi các cấu hình này bằng cách chỉ định các giá trị không mặc định trong JumpStartModel.

Sau khi triển khai, bạn có thể chạy suy luận đối với điểm cuối đã triển khai thông qua dự đoán SageMaker:

payload = {“inputs”: “Hello!”}
predictor.predict(payload)

Các câu gợi đầu mẫu

Bạn có thể tương tác với một mô hình Mixtral-8x7B giống như bất kỳ mô hình tạo văn bản tiêu chuẩn nào, trong đó mô hình xử lý một chuỗi đầu vào và đầu ra các từ tiếp theo được dự đoán trong chuỗi. Trong phần này, chúng tôi cung cấp các câu gợi đầu mẫu.

Tạo mã

Sử dụng ví dụ trước đó, chúng ta có thể sử dụng các câu gợi đầu tạo mã như sau:

# Code generation
payload = {
    “inputs”: “Write a program to compute factorial in python:”,
    “parameters”: {
        “max_new_tokens”: 200,
    },
}
predictor.predict(payload)

Bạn nhận được kết quả đầu ra sau:

Input Text: Write a program to compute factorial in python:
Generated Text:
Factorial of a number is the product of all the integers from 1 to that number.

For example, factorial of 5 is 1*2*3*4*5 = 120.

Factorial of 0 is 1.

Factorial of a negative number is not defined.

The factorial of a number can be written as n!.

For example, 5! = 120.

## Write a program to compute factorial in python

“`
def factorial(n):
if n == 0:
return 1
else:
return n * factorial(n-1)

print(factorial(5))
“`

Output:

“`
120
“`

## Explanation:

In the above program, we have defined a function called factorial which takes a single argument n.

If n is equal to 0, then we return 1.

Otherwise, we return n multiplied by the factorial of n-1.

We then call the factorial function with the argument 5 and print the result.

The output of the program is 120, which is the factorial of 5.

## How to compute factorial in python

In the above program, we have used a recursive function to compute the factorial of a number.

A recursive function is a function that calls itself.

In this case, the factorial function calls itself with the argument n-1.

This process continues until n is equal to 0, at which point the function returns 1.

The factorial of a number can also be computed using a loop.

For example, the following program uses a for loop to compute the factorial of a number:

“`
def factorial(n):
result = 1
for i in range(1, n+1):
result *= i
return result

Phân tích cảm xúc

Bạn có thể thực hiện phân tích cảm xúc bằng cách sử dụng một câu gợi đầu như sau với Mixtral 8x7B:

payload = {
“inputs”: “””\
Tweet: “I hate it when my phone battery dies.”
Sentiment: Negative

Tweet: “My day has been :+1:”
Sentiment: Positive

Tweet: “This is the link to the article”
Sentiment: Neutral

Tweet: “This new music video was incredibile”
Sentiment:”””,
“parameters”: {
“max_new_tokens”: 2,
},
}
predictor.predict(payload)

Bạn nhận được kết quả đầu ra sau:

Input Text: Tweet: “I hate it when my phone battery dies.”
Sentiment: Negative
###
Tweet: “My day has been :+1:”
Sentiment: Positive
###
Tweet: “This is the link to the article”
Sentiment: Neutral
###
Tweet: “This new music video was incredibile”
Sentiment:
Generated Text:  Positive

Câu hỏi và trả lời

Bạn có thể sử dụng một câu gợi đầu câu hỏi và trả lời như sau với Mixtral-8x7B:

# Question answering
payload = {
    “inputs”: “Could you remind me when was the C programming language invented?”,
    “parameters”: {
        “max_new_tokens”: 100,
    },
}
query_endpoint(payload)

Bạn nhận được kết quả đầu ra sau:
Input Text: Could you remind me when was the C programming language invented?
Generated Text:

C was invented in 1972 by Dennis Ritchie at Bell Labs.

C is a general-purpose programming language. It was invented to write the UNIX operating system.

C is a structured programming language. It is a middle-level language. It is a procedural language.

C is a compiled language. It is a portable language.

C is a case-sensitive language. It is a free-form language

Mixtral-8x7B Instruct

Phiên bản được điều chỉnh theo hướng dẫn của Mixtral-8x7B chấp nhận các hướng dẫn được định dạng trong đó các vai trò trong cuộc trò chuyện phải bắt đầu bằng một gợi đầu của người dùng và luân phiên giữa hướng dẫn của người dùng và trợ lý (câu trả lời của mô hình). Định dạng hướng dẫn phải được tuân thủ một cách nghiêm ngặt, nếu không mô hình sẽ tạo ra các đầu ra không tối ưu. Mẫu được sử dụng để xây dựng một gợi đầu cho mô hình Instruct được định nghĩa như sau:

<s> [INST] Instruction [/INST] Model answer</s> [INST] Follow-up instruction [/INST]]

Lưu ý rằng <s> và </s> là các mã thông báo đặc biệt cho đầu chuỗi (BOS) và cuối chuỗi (EOS), trong khi [INST] và [/INST] là các chuỗi thông thường.

Đoạn mã sau cho thấy cách bạn có thể định dạng gợi đầu theo định dạng hướng dẫn:

from typing import Dict, List

def format_instructions(instructions: List[Dict[str, str]]) -> List[str]:
    “””Format instructions where conversation roles must alternate user/assistant/user/assistant/…”””
    prompt: List[str] = []
    for user, answer in zip(instructions[::2], instructions[1::2]):
        prompt.extend([“<s>”, “[INST] “, (user[“content”]).strip(), ” [/INST] “, (answer[“content”]).strip(), “</s>”])
    prompt.extend([“<s>”, “[INST] “, (instructions[-1][“content”]).strip(), ” [/INST] “,”</s>”])
    return “”.join(prompt)


def print_instructions(prompt: str, response: str) -> None:
    bold, unbold = ‘\033[1m’, ‘\033[0m’
    print(f”{bold}> Input{unbold}\n{prompt}\n\n{bold}> Output{unbold}\n{response[0][‘generated_text’]}\n”)

Truy xuất kiến thức

Bạn có thể sử dụng đoạn mã sau cho một gợi đầu truy xuất kiến thức:

instructions = [{“role”: “user”, “content”: “what is the recipe of mayonnaise?”}]
prompt = format_instructions(instructions)
payload = {
“inputs”: prompt,
“parameters”: {“max_new_tokens”: 315, “do_sample”: True}
}
response=predictor.predict(payload)
print_instructions(prompt, response)

Bạn nhận được kết quả đầu ra sau:

> Input
<s>[INST] what is the recipe of mayonnaise? [/INST]</s>

> Output
Here is a simple recipe for homemade mayonnaise:

Ingredients:

* 1 egg yolk
* 1 tablespoon of mustard (Dijon is a good choice)
* 1 cup of oil (canola or vegetable oil work well)
* 1-2 tablespoons of white vinegar or lemon juice
* Salt to taste

Instructions:

1. In a medium bowl, whisk together the egg yolk and mustard. It is important that these ingredients are at room temperature.
2. Start adding the oil drop by drop, whisking continuously. This step is crucial to ensure that the mayonnaise emulsifies and does not separate.
3. Once you have added about a quarter of the oil and the mixture has thickened, you can start adding the oil in a thin stream, still whisking constantly.
4. When all the oil has been incorporated and the mayonnaise is thick, whisk in the vinegar or lemon juice and salt to taste.
5. If the mayonnaise is too thick, you can thin it with a little water.
6. Store the mayonnaise in the refrigerator and use within a few days.

Note: It is important to use pasteurized eggs or egg yolks when making homemade mayonnaise to reduce the risk of foodborne illness.

Lập trình

Các mô hình Mixtral có thể thể hiện các ưu điểm đã được thử nghiệm cho các nhiệm vụ lập trình, như được minh họa trong đoạn mã sau:

instructions = [
{
“role”: “user”,
“content”: “In Bash, how do I list all text files in the current directory (excluding subdirectories) that have been modified in the last month?”,
}
]
prompt = format_instructions(instructions)
payload = {
“inputs”: prompt,
“parameters”: {“max_new_tokens”: 256, “do_sample”: True, “temperature”: 0.2}
}
response=predictor.predict(payload)
print_instructions(prompt, response)

Bạn nhận được kết quả đầu ra sau:

> Input
<s>[INST] In Bash, how do I list all text files in the current directory (excluding subdirectories) that have been modified in the last month? [/INST]</s>
> Output
ef{0.15cm} To list all text files in the current directory that have been modified in the last month, you can use a combination of the `find` and `grep` commands in Bash. Here’s the command you’re looking for:

“`bash
find . -maxdepth 1 -type f -name “*.txt” -mtime -30
“`

Let’s break down this command:

– `find .` starts a search in the current directory.
– `-maxdepth 1` limits the search to the current directory only (excluding subdirectories).
– `-type f` specifies that you’re looking for files.
– `-name “*.txt”` filters the results to only include files with a `.txt` extension.
– `-mtime -30` filters the results to only include files modified within the last 30 days.

This command will output the paths of all text files in the current directory that have been modified in the last month.

Toán học và lập luận

Các mô hình Mixtral cũng báo cáo về các ưu điểm về độ chính xác trong toán học:

instructions = [
{
“role”: “user”,
“content”: “I bought an ice cream for 6 kids. Each cone was $1.25 and I paid with a $10 bill. How many dollars did I get back? Explain first before answering.”,
}
]
prompt = format_instructions(instructions)
payload = {
“inputs”: prompt,
“parameters”: {“max_new_tokens”: 600, “do_sample”: True, “temperature”: 0.2}
}
response=predictor.predict(payload)
print_instructions(prompt, response)

Các mô hình Mixtral có thể cung cấp sự hiểu biết như được thể hiện trong đầu ra sau với logic toán học:

> Input
<s>[INST] I bought an ice cream for 6 kids. Each cone was $1.25 and I paid with a $10 bill. How many dollars did I get back? Explain first before answering. [/INST] </s>
> Output
First, let’s calculate the total cost of the ice cream cones. Since each cone costs $1.25 and you bought 6 cones, the total cost would be:

Total cost = Cost per cone * Number of cones
Total cost = $1.25 * 6
Total cost = $7.50

Next, subtract the total cost from the amount you paid with the $10 bill to find out how much change you got back:

Change = Amount paid – Total cost
Change = $10 – $7.50
Change = $2.50

So, you got $2.50 back.

Dọn dẹp

Sau khi bạn hoàn thành việc chạy notebook, hãy xóa tất cả các tài nguyên mà bạn đã tạo trong quá trình đó để ngừng tính toán cho hóa đơn của bạn. Sử dụng đoạn mã sau:

predictor.delete_model()
predictor.delete_endpoint()

Kết luận

Trong bài viết này, chúng tôi đã hướng dẫn bạn cách bắt đầu với Mixtral-8x7B trong SageMaker Studio và triển khai mô hình để suy luận. Vì các mô hình cơ sở đã được huấn luyện trước, chúng có thể giúp giảm chi phí huấn luyện và cơ sở hạ tầng và cho phép tùy chỉnh cho trường hợp sử dụng của bạn. Hãy truy cập SageMaker JumpStart trong SageMaker Studio ngay bây giờ để bắt đầu.

Về các tác giả

Rachna Chadha là Kiến trúc sư Giải pháp Chính AI/ML trong Tài khoản Chiến lược tại AWS. Rachna là một người lạc quan và tin rằng việc sử dụng AI một cách đạo đức và có trách nhiệm có thể cải thiện xã hội trong tương lai và mang lại thịnh vượng kinh tế và xã hội. Trong thời gian rảnh rỗi, Rachna thích dành thời gian cùng gia đình, leo núi và nghe nhạc.

Tiến sĩ Kyle Ulrich là Một nhà khoa học ứng dụng trong nhóm thuật toán tích hợp sẵn của Amazon SageMaker. Các lĩnh vực nghiên cứu của anh bao gồm thuật toán học máy có thể mở rộng, thị giác máy tính, chuỗi thời gian, thống kê Bayesian không tham số và quy trình Gaussian. Tiến sĩ Ulrich đã nhận bằng Tiến sĩ tại Đại học Duke và đã công bố các bài báo tại NeurIPS, Cell và Neuron.

Christopher Whitten là một nhà phát triển phần mềm trong nhóm JumpStart. Anh giúp mở rộng lựa chọn mô hình và tích hợp mô hình với các dịch vụ SageMaker khác. Chris đam mê việc tăng tốc sự phổ biến của AI trên nhiều lĩnh vực kinh doanh khác nhau.

Tiến sĩ Fabio Nonato de Paula là một Quản lý Cấp cao, Chuyên gia GenAI SA, giúp các nhà cung cấp mô hình và khách hàng mở rộng sức mạnh của AI sinh sáng trong AWS. Fabio đam mê việc phổ biến hóa việc tiếp cận công nghệ AI sinh sáng. Ngoài công việc, bạn có thể tìm thấy Fabio đi xe máy trong những ngọn đồi của Thung lũng Sonoma hoặc đọc ComiXology.

Tiến sĩ Ashish Khetan là Một Nhà khoa học ứng dụng cấp cao với các thuật toán tích hợp sẵn của Amazon SageMaker và giúp phát triển các thuật toán học máy. Anh đã nhận bằng Tiến sĩ từ Đại học Illinois Urbana-Champaign. Anh là một nhà nghiên cứu tích cực trong lĩnh vực học máy và suy luận thống kê, và đã xuất bản nhiều bài báo tại các hội nghị NeurIPS, ICML, ICLR, JMLR, ACL và EMNLP.

Karl Albertsen dẫn dắt sản phẩm, kỹ thuật và khoa học cho các thuật toán Amazon SageMaker và JumpStart, trung tâm học máy SageMaker. Anh đam mê về việc áp dụng học máy để mở khóa giá trị kinh doanh.