Trong bài đăng trên blog này, tôi sẽ hướng dẫn bạn từng bước về quy trình chạy đối thủ cạnh tranh ChatGPT của MosaicML, MPT-7B, trên phiên bản AWS SageMaker của riêng bạn.
Bạn có hào hứng với các khả năng của ChatGPT nhưng lo ngại về việc lộ dữ liệu nhạy cảm của mình cho OpenAI không? May mắn thay, có những lựa chọn thay thế mà bạn có thể chạy trên cơ sở hạ tầng của riêng mình. Một giải pháp thay thế như vậy là MPT-7b của MosaicML, một đối thủ cạnh tranh với ChatGPT, mà chúng ta sẽ khám phá trong bài đăng trên blog này.
MosaicML, được Databricks mua lại gần đây với giá 1,3 tỷ đô la , đã tạo nên làn sóng trong cộng đồng ML với mẫu MPT-7B của họ, một đối thủ cạnh tranh được cho là của ChatGPT. Bất chấp lời hứa của nó, việc chạy mô hình này có thể gây khó khăn do tài liệu thưa thớt và các yêu cầu tài nguyên nặng nề của nó. Tuy nhiên, người ta có thể chạy MPT-7B trên AWS SageMaker trong sổ ghi chép Jupyter, một môi trường thân thiện với người mới bắt đầu và rất linh hoạt để lặp lại nhanh chóng. Thiết lập này cho phép bạn kiểm tra tính khả thi của mô hình và các yêu cầu phần cứng trước khi quyết định chuyển sang sản xuất.
Chạy MPT-7B trong sổ ghi chép Jupyter trên AWS SageMaker mang lại một số lợi ích. Bạn không chỉ có thể trả tiền cho những gì bạn sử dụng và tắt nó đi khi bạn hoàn thành, mà khả năng dễ dàng chạy lại các phần mã của bạn mà không phải tải lại mô hình giúp tiết kiệm thời gian trong quá trình phát triển lặp lại. Nhưng hãy cẩn thận! Nếu bạn quên dừng phiên bản sổ ghi chép của mình, phí có thể tăng lên nhanh chóng.
Mặc dù phương pháp này tương đối thuận tiện, nhưng có một số cân nhắc bạn phải tính đến. Thứ nhất, tải mô hình có thể mất tới 20 phút ngay cả trên GPU hiệu suất cao, khiến quá trình này hơi tốn thời gian. Ngoài ra, chi phí là một yếu tố cần xem xét, vì chi phí vận hành ít nhất là 4 đô la mỗi giờ. Bạn sẽ cần chạy MPT-7B trên ít nhất một phiên bản p3.2xlarge ; bất cứ điều gì nhỏ hơn dường như không khả thi. Nếu chọn EC2 thay vì SageMaker, bạn sẽ phải xin phép AWS để sử dụng phiên bản p3.2xlarge .
Trong các phần tiếp theo, tôi sẽ hướng dẫn bạn từng bước cách chạy mô hình MPT-7B trong sổ ghi chép jupyter SageMaker của riêng bạn:
Khởi động Bảng điều khiển AWS và tìm kiếm SageMaker:
Từ menu bên trái, chọn Notebook->Notebook instance :
Bấm vào nút Tạo phiên bản sổ ghi chép :
Chỉ định một tên ví dụ. Chọn loại phiên bản m1.p3.2xlarge . Thật không may, có vẻ như phiên bản mạnh mẽ như m1.p3.2xlarge là bắt buộc, nếu không, phiên bản của bạn có thể hết bộ nhớ hoặc mất quá nhiều thời gian để trả lời ngay cả những câu hỏi đơn giản nhất. Tuy nhiên, xin lưu ý rằng phiên bản này sẽ có giá khoảng 4 đô la/giờ, vì vậy, điều quan trọng là phải theo dõi cẩn thận việc sử dụng của bạn.
Nếu môi trường thử nghiệm của bạn không có bất kỳ dữ liệu đặc biệt nhạy cảm nào trong đó thì bạn có thể cấp quyền truy cập vào Bộ chứa S3 bất kỳ . Nếu không, bạn sẽ cần phải rõ ràng hơn.
Sau đó, sổ ghi chép sẽ ở trạng thái Đang chờ xử lý . Điều này có thể sẽ kéo dài trong khoảng 10 phút:
Trong thời gian chờ đợi, chúng tôi sẽ tải xuống một sổ ghi chép để có thể tải nó lên sau khi phiên bản AWS SageMaker hoàn tất quá trình cung cấp.
Truy cập sổ ghi chép tại MPT-7B trên AWS SageMaker.ipynb và tải xuống:
Trong sổ ghi chép này, bạn sẽ nhận thấy hai khối mã chính. Khối đầu tiên tải mã thông báo MPT-7B và mô hình:
from torch import cuda, bfloat16 from transformers import AutoTokenizer, AutoModelForCausalLM, AutoConfig device = f'cuda:{cuda.current_device()}' if cuda.is_available() else 'cpu' tokenizer = AutoTokenizer.from_pretrained("mosaicml/mpt-7b-chat", trust_remote_code=True) config={"init_device": "meta"} model = AutoModelForCausalLM.from_pretrained("mosaicml/mpt-7b-chat", trust_remote_code=True, config=config, torch_dtype=bfloat16) print(f"device={device}") print('model loaded')
Mã thông báo được sử dụng để mã hóa câu hỏi gửi đến mô hình và giải mã phản hồi từ mô hình. Ngoài ra, chúng tôi có được thông số kỹ thuật của thiết bị cho GPU của chúng tôi để chúng tôi có thể định cấu hình mô hình để sử dụng nó sau này:
import time from IPython.display import Markdown import torch from transformers import StoppingCriteria, StoppingCriteriaList # mtp-7b is trained to add "<|endoftext|>" at the end of generations stop_token_ids = [tokenizer.eos_token_id] # Define custom stopping criteria object. # Source: https://github.com/pinecone-io/examples/blob/master/generation/llm-field-guide/mpt-7b/mpt-7b-huggingface-langchain.ipynb class StopOnTokens(StoppingCriteria): def __call__(self, input_ids: torch.LongTensor,scores: torch.FloatTensor, **kwargs) -> bool: for stop_id in stop_token_ids: if input_ids[0][-1] == stop_id: return True return False stopping_criteria = StoppingCriteriaList([StopOnTokens()]) def ask_question(question, max_length=100): start_time = time.time() # Encode the question input_ids = tokenizer.encode(question, return_tensors='pt') # Use the GPU input_ids = input_ids.to(device) # Generate a response output = model.generate( input_ids, max_new_tokens=max_length, temperature=0.9, stopping_criteria=stopping_criteria ) # Decode the response response = tokenizer.decode(output[:, input_ids.shape[-1]:][0], skip_special_tokens=True) end_time = time.time() duration = end_time - start_time display(Markdown(response)) print("Function duration:", duration, "seconds")
Lưu ý việc sử dụng stopping_critera
, điều này là cần thiết nếu không mô hình sẽ bắt đầu lảm nhảm, ngay cả sau khi nó đã trả lời câu hỏi của chúng ta.
Xem tham số tạo mô hình nếu bạn muốn khám phá các tùy chọn khác nhau.
Bây giờ, hãy tải sổ ghi chép này lên SageMaker.
Hy vọng rằng vào thời điểm này, phiên bản sổ ghi chép SageMaker của bạn đã được cung cấp xong. Khi có, hãy nhấp vào liên kết Mở Jupyter :
Sau đó, nhấp vào nút Tải lên ở góc trên cùng bên phải của màn hình và chọn sổ ghi chép mà bạn vừa tải xuống:
Đặt kernel thành conda_python3 :
Chọn Cell -> Run All :
Biểu tượng đồng hồ cát sau đó sẽ xuất hiện trong tab trình duyệt:
Sau đó, bạn sẽ cần đợi khoảng 10 phút để mô hình được tải xuống:
Sau khi nó chạy, bạn sẽ thấy câu trả lời cho câu hỏi Giải thích cho tôi sự khác biệt giữa phản ứng phân hạch và phản ứng tổng hợp hạt nhân :
Vì mô hình và trình mã thông báo đã được tải ở trên, nên bạn chỉ cần sửa đổi khối mã hỏi_câu hỏi và nhấp vào nút Chạy để hỏi bất kỳ câu hỏi nào khác. Điều này sẽ giúp bạn tiết kiệm 10 phút mỗi lần bạn muốn kiểm tra một câu hỏi mới.
Ngay sau khi kiểm tra xong mô hình, bạn sẽ muốn quay lại danh sách các phiên bản sổ ghi chép của mình và dừng nó. Nếu không, $4/giờ sẽ tăng lên rất nhanh 💸
Về hiệu suất, các thử nghiệm sơ bộ của tôi cho thấy kết quả của MPT-7B có thể không tốt bằng ChatGPT. Nó thực hiện tốt công việc trả lời các câu hỏi như:
Nhưng đối với những câu hỏi như_Thủ đô của Belize là gì?_ nó fail khá tệ:
Tôi hiện đang thu thập thêm dữ liệu và sẽ tiến hành phân tích so sánh toàn diện trong một bài đăng blog tiếp theo. Trong bài đăng đó, tôi sẽ so sánh hiệu suất câu hỏi và câu trả lời của MPT-7B, MPT-30B, Falcon-40b và ChatGPT bằng lịch sử hội thoại thực tế.
Khi bạn đã sẵn sàng chuyển đổi từ thử nghiệm sang sản xuất, SageMaker cung cấp một lợi ích bổ sung - khả năng tạo điểm cuối cho mô hình của bạn. Với SageMaker, bạn có thể tự động thay đổi quy mô dựa trên nhu cầu đến điểm cuối, tối ưu hóa tài nguyên của mình.
Hãy lưu ý rằng quy trình của bạn rất dễ bị rẽ nhánh khi đang chạy trong sổ ghi chép Jupyter và hết bộ nhớ. Nếu điều này xảy ra, chỉ cần tắt kernel và chạy lại tất cả các lệnh.
Nếu bạn muốn chạy mô hình này trên một nền tảng khác ngoài AWS, thì Google Colab Pro là một lựa chọn khả thi khác với mức giá 9 đô la/tháng. Tuy nhiên, dựa trên thử nghiệm của mình, chúng tôi nhận thấy rằng chúng tôi đã sử dụng hết các khoản tín dụng được cung cấp chỉ trong vòng vài giờ. 😳
Một thách thức khác mà bạn có thể gặp phải là không thể sử dụng tối ưu hóa Triton trên SageMaker do phiên bản CUDA không tương thích. Rất tiếc, các phiên bản P3 hiện tại của AWS không bao gồm phiên bản CUDA gần đây. Do đó, nếu muốn sử dụng tính năng tối ưu hóa của Triton, bạn sẽ cần tạo bộ chứa EC2 có quyền truy cập dòng lệnh. Tuy nhiên, điều quan trọng cần lưu ý là bạn cũng sẽ cần có sự cho phép đặc biệt từ Bộ phận hỗ trợ của AWS để chạy phiên bản có 8 VCPU. Trong một bài đăng trong tương lai, tôi sẽ cung cấp hướng dẫn chi tiết về cách tích hợp Triton và sử dụng nhà cung cấp đám mây GPU hiệu quả hơn về chi phí, chẳng hạn như Lambda Labs .
Mặc dù MPT-7B của MosaicML cung cấp một giải pháp thay thế khả thi cho ChatGPT của OpenAI, nhưng nó cũng đưa ra những thách thức riêng. Chạy mô hình có thể tốn thời gian, tốn kém và thiếu tài liệu sẵn có. Tuy nhiên, khả năng giữ mô hình trong nhà và bảo vệ dữ liệu của bạn không bị lộ ra ngoài với OpenAI có thể hấp dẫn đối với một số trường hợp sử dụng nhất định.
SageMaker mang đến sự thuận tiện tuyệt vời để nhanh chóng thử nghiệm mô hình và cung cấp sự linh hoạt để chuyển sang sản xuất khi bạn đã sẵn sàng. Cho dù bạn mới bắt đầu sử dụng MPT-7B hay đã sử dụng nó được một thời gian, chúng tôi hy vọng hướng dẫn này đã cung cấp những hiểu biết có giá trị.
Hãy theo dõi bài đăng blog tiếp theo của chúng tôi, nơi chúng tôi sẽ nghiên cứu sâu hơn về các so sánh hiệu suất giữa MPT-7B, MPT-30B, Falcon-40b và ChatGPT.
Xem các liên kết sau nếu bạn muốn tìm hiểu thêm về MPT-7B hoặc biến thể lớn hơn của nó, MPT-30B .
Và hãy nhớ rằng, cho dù bạn đang làm việc với ChatGPT hay MPT-7B, điều quan trọng là đảm bảo trường hợp sử dụng của bạn được phục vụ mà không ảnh hưởng đến quyền riêng tư dữ liệu và hiệu quả chi phí. Chúc bạn mày mò vui vẻ!
Tại MindfulDataAI.com , chúng tôi cung cấp ChatGPT cho các doanh nghiệp. Nếu bạn quan tâm đến việc tận dụng ChatGPT, MPT hoặc các mô hình khác với dữ liệu của công ty mình, vui lòng liên hệ với chúng tôi.