Transformers và Mamba: Hiểu sự khác biệt
Để hiểu vì sao Codestral Mamba nổi bật, hãy so sánh kiến trúc nền tảng của nó, mô hình không gian trạng thái Mamba (SSM), với kiến trúc Transformer truyền thống.
Transformers
Các mô hình Transformer, như GPT-4o, sử dụng cơ chế tự chú ý để xử lý các tác vụ ngôn ngữ phức tạp bằng cách tập trung vào nhiều phần của đầu vào cùng lúc.
Tuy nhiên, chúng có một vấn đề lớn: độ phức tạp bậc hai. Khi kích thước đầu vào tăng, chi phí tính toán và sử dụng bộ nhớ của chúng tăng theo hàm bậc hai, dẫn đến kém hiệu quả với các chuỗi rất dài.
Mamba
Các mô hình Mamba, dựa trên State Space Models (SSM), tránh được nút thắt bậc hai này, giúp xử lý chuỗi dài tốt hơn nhiều, thậm chí lên tới 1 triệu token. Chúng có thể chạy nhanh hơn Transformer tới năm lần.
Mamba đạt hiệu năng ngang ngửa Transformer và mở rộng tốt hơn với chuỗi dài. Theo các tác giả Albert Gu và Tri Dao, Mamba mang lại suy luận nhanh và khả năng mở rộng tuyến tính, thường vượt trội so với Transformer cùng kích cỡ và sánh ngang với mô hình lớn gấp đôi.

Vì sao chọn Mamba cho mã nguồn?
Kiến trúc của Mamba rất phù hợp cho sinh mã, nơi việc duy trì ngữ cảnh qua các chuỗi dài là quan trọng. Khác với Transformer, vốn chậm lại và gặp vấn đề bộ nhớ với ngữ cảnh dài, độ phức tạp thời gian tuyến tính của Mamba và khả năng xử lý độ dài ngữ cảnh gần như vô hạn giúp đảm bảo hiệu năng nhanh chóng và ổn định với các kho mã lớn.
Transformers chịu ảnh hưởng của độ phức tạp bậc hai trong cơ chế chú ý. Mỗi token phải xét mọi token trước đó khi dự đoán, dẫn tới chi phí tính toán và bộ nhớ cao. Điều này khiến việc huấn luyện và sinh token mới ngày càng chậm khi kích thước ngữ cảnh tăng, thường gây lỗi tràn bộ nhớ.
Mamba giải quyết các vấn đề này bằng cách dùng SSM để truyền thông tin giữa các token hiệu quả, tránh được độ phức tạp bậc hai của Transformer. Thiết kế của nó cho phép xử lý chuỗi dài hiệu quả, trở thành lựa chọn mạnh mẽ cho các ứng dụng cần xử lý ngữ cảnh mở rộng.
Điểm chuẩn của Codestral Mamba
Codestral Mamba (7B) nổi bật ở các tác vụ liên quan đến mã, liên tục vượt qua các mô hình 7B khác trong điểm chuẩn HumanEval, thước đo khả năng sinh mã trên nhiều ngôn ngữ lập trình.

Nguồn: Mistral AI
Cụ thể, nó đạt độ chính xác ấn tượng 75,0% trên HumanEval cho Python, vượt CodeGemma-1.1 7B (61,0%), CodeLlama 7B (31,1%) và DeepSeek v1.5 7B (65,9%). Thậm chí nó còn nhỉnh hơn mô hình Codestral (22B) lớn hơn với độ chính xác 81,1%.
Trên các ngôn ngữ khác trong HumanEval, Codestral Mamba tiếp tục thể hiện hiệu năng mạnh mẽ. Dù điểm cho Bash scripting thấp hơn các chỉ số khác, nó vẫn cạnh tranh trong phân khúc của mình.
Đáng chú ý, trên điểm chuẩn CruxE cho sinh mã đa tác vụ, Codestral Mamba đạt 57,8%, vượt CodeGemma-1.1 7B và sánh với CodeLlama 34B.
Những kết quả này nhấn mạnh hiệu quả của Codestral Mamba trong các tác vụ sinh và hiểu mã, đặc biệt nếu xét đến kích thước tương đối nhỏ so với một số đối thủ.
Mặc dù cần thêm thử nghiệm và so sánh với nhiều mô hình và tác vụ hơn, các kết quả ban đầu đặt Codestral Mamba như một lựa chọn mã nguồn mở đầy hứa hẹn cho nhà phát triển.
Thiết lập Codestral Mamba
Hãy cùng điểm qua các bước để bắt đầu với Codestral Mamba.
Cài đặt
Để cài đặt Codestral Mamba, chạy lệnh sau:
pip install codestral_mamba
Lấy khóa API
Để sử dụng Codestral API, bạn sẽ cần một khóa API. Cách lấy như sau:
- Truy cập trang đăng ký Mistral AI và tạo tài khoản.
- Đối với api.mistral.ai, vào thẻ API Keys. Nhấp Create new key để tạo khóa API của bạn.

Đặt khóa API vào biến môi trường bằng lệnh sau:
export MISTRAL_API_KEY='your_api_key'
Ứng dụng của Codestral Mamba
Sau khi thiết lập Codestral Mamba, hãy cùng xem vài ví dụ.
Tự động hoàn thành mã
Nếu bạn có một đoạn mã chưa hoàn chỉnh, hãy dùng Codestral Mamba để hoàn thiện. Ví dụ:
import os
from mistralai.client import MistralClient
from mistralai.models.chat_completion import ChatMessage
api_key = os.environ["MISTRAL_API_KEY"]
client = MistralClient(api_key=api_key)
model = "codestral-mamba-latest"
messages = [
ChatMessage(role="user", content="Please complete the following function: \\n def calculate_area_of_square(side_length):\\n # missing part here")
]
chat_response = client.chat(
model=model,
messages=messages
)
print(chat_response.choices[0].message.content)
The function calculate_area_of_square(side_length) is designed to calculate the area of a square given its side length.
The area of a square can be calculated by squaring the length of one of its sides. Therefore, the function simply needs to multiply the side length by itself to get the area.
Here is how you can complete the function:
def calculate_area_of_square(side_length):
area = side_length * side_length
return area
You can also write this function in a more concise way using the exponentiation operator **:
def calculate_area_of_square(side_length):
return side_length ** 2
Both of these functions will correctly calculate and return the area of a square given its side length.
Sinh hàm
Codestral Mamba cũng có thể sinh một hàm từ mô tả. Ví dụ, xem đầu ra dưới đây cho mô tả: “Hãy viết cho tôi một hàm Python trả về giai thừa của một số.”
import os
from mistralai.client import MistralClient
from mistralai.models.chat_completion import ChatMessage
client = MistralClient(api_key=api_key)
model = "codestral-mamba-latest"
messages = [
ChatMessage(role="user", content="Please write me a Python function that returns the factorial of a number")
]
chat_response = client.chat(
model=model,
messages=messages
)
print(chat_response.choices[0].message.content)
Sure, here's a simple Python function that calculates the factorial of a number:
def factorial(n):
if n == 0:
return 1
else:
return n * factorial(n-1)
This function uses recursion, a method in which a function calls itself. The base case is when n is 0, in which case the function returns 1. For any other value, the function returns n multiplied by the factorial of n-1.
Tái cấu trúc
Cuối cùng, bạn có thể dùng Codestral Mamba để tái cấu trúc và cải thiện mã hiện có như sau:
import os
from mistralai.client import MistralClient
from mistralai.models.chat_completion import ChatMessage
api_key = os.environ["MISTRAL_API_KEY"]
client = MistralClient(api_key=api_key)
model = "codestral-mamba-latest"
messages = [
ChatMessage(role="user", content="""Please improve / refactor the following Python function: \\n```python
def fibonacci(n: int) -> int:
if n <= 0:
return "Input should be a positive integer."
elif n == 1:
return 0
elif n == 2:
return 1
else:
a, b = 0, 1
for _ in range(2, n):
a, b = b, a + b
return b
```""")
]
chat_response = client.chat(
model=model,
messages=messages
)
print(chat_response.choices[0].message.content)
The provided Python function is already quite well-written and efficient. However, it could be improved by adding some type hints for clarity and to provide better documentation. Here's a refactored version of the function:
def fibonacci(n: int) -> int:
"""
Calculates the nth Fibonacci number.
Args:
n (int): The position of the Fibonacci number to be calculated.
Returns:
int: The nth Fibonacci number.
"""
if not isinstance(n, int) or n <= 0:
raise ValueError("Input should be a positive integer.")
if n <= 2:
return n - 1
else:
a, b = 0, 1
for _ in range(2, n):
a, b = b, a + b
return b
I've added a docstring to the function to explain what it does. I've also added some input validation to check that the input is a positive integer and to raise a meaningful error if it's not. I've also adjusted the base cases to return `n - 1` for `n <= 2` to make the function more concise and easier to understand.
Các lợi ích bổ sung của Codestral Mamba
Codestral Mamba mang lại một số lợi thế khác khiến nó là lựa chọn hấp dẫn.
Hỗ trợ đa ngôn ngữ
Codestral Mamba hỗ trợ hơn 80 ngôn ngữ lập trình. Điều này giúp nó trở thành công cụ linh hoạt cho các nhà phát triển làm việc trong nhiều môi trường, dù bạn đang viết Python, JavaScript hay bất kỳ ngôn ngữ được hỗ trợ nào khác.
Cửa sổ ngữ cảnh lớn
Với khả năng xử lý tới 256.000 token, Codestral Mamba có thể quản lý các kho mã lớn và duy trì ngữ cảnh xuyên suốt nhiều tệp.
Điều này đặc biệt hữu ích cho các dự án phức tạp, nơi việc theo dõi lượng mã và phụ thuộc lớn là rất quan trọng.
Lợi thế mã nguồn mở
Codestral Mamba là mã nguồn mở theo giấy phép Apache 2.0. Điều này có nghĩa mã của nó minh bạch và mọi người đều có thể xem, sửa đổi hoặc đóng góp.
Tính mở giúp thúc đẩy cộng đồng hợp tác, cho phép các nhà phát triển cải thiện và điều chỉnh mô hình cho nhiều nhu cầu khác nhau.
Tinh chỉnh Codestral Mamba và sử dụng nâng cao
Dù Codestral Mamba đã có khả năng ấn tượng ngay từ đầu, bạn vẫn có thể tăng cường hiệu năng và điều chỉnh cho nhu cầu cụ thể thông qua tinh chỉnh và kỹ thuật nhắc nâng cao.
Tinh chỉnh trên dữ liệu tùy chỉnh
Codestral Mamba có thể được tùy biến để phù hợp hơn với nhu cầu của bạn bằng cách tinh chỉnh trên dữ liệu riêng. Quá trình này bao gồm huấn luyện mô hình trên mã và thông tin liên quan đến miền hoặc kho mã cụ thể của bạn.
Tinh chỉnh giúp tăng hiệu suất của mô hình, khiến nó hiệu quả hơn cho ứng dụng riêng và cải thiện độ chính xác, mức độ phù hợp khi sinh mã.
Nhắc nâng cao
Để giải quyết các tác vụ phức tạp hơn, bạn có thể dùng kỹ thuật nhắc nâng cao với Codestral Mamba. Một phương pháp là chain-of-thought prompting, hướng dẫn mô hình qua quá trình suy luận từng bước. Kỹ thuật này khai thác khả năng lý luận nâng cao của mô hình để xử lý truy vấn phức tạp và tạo ra phản hồi chi tiết, thấu đáo hơn.
Kết luận
Codestral Mamba, dựa trên mô hình không gian trạng thái Mamba, khắc phục những hạn chế của Transformer truyền thống trong việc xử lý các chuỗi mã dài.
Tính mã nguồn mở, hỗ trợ đa ngôn ngữ và khả năng xử lý ngữ cảnh lớn khiến nó trở thành lựa chọn giá trị cho các nhà phát triển.
Nếu bạn muốn tìm hiểu thêm về bộ LLM của Mistral, tôi gợi ý các bài viết sau:
Ryan là trưởng nhóm khoa học dữ liệu, chuyên xây dựng các ứng dụng AI sử dụng LLM. Anh là nghiên cứu sinh Tiến sĩ về Xử lý Ngôn ngữ Tự nhiên và Đồ thị Tri thức tại Imperial College London, nơi anh cũng hoàn thành bằng Thạc sĩ Khoa học Máy tính. Ngoài lĩnh vực khoa học dữ liệu, anh viết bản tin Substack hàng tuần, The Limitless Playbook, nơi anh chia sẻ một ý tưởng có thể áp dụng ngay từ các tư tưởng gia hàng đầu thế giới và đôi khi viết về những khái niệm cốt lõi của AI.

Codestral Mamba của Mistral AI là một mô hình ngôn ngữ chuyên biệt, được thiết kế riêng cho việc sinh mã.
Khác với các mô hình dựa trên Transformer truyền thống, nó sử dụng Mamba, một mô hình không gian trạng thái (SSM), mang lại lợi thế trong việc xử lý các chuỗi mã dài đồng thời duy trì hiệu quả.
Trong bài viết này, chúng tôi sẽ khám phá những khác biệt chính giữa các kiến trúc này và hướng dẫn bạn bắt đầu với Codestral Mamba.