用Mistral Devstral建立低英寸的AI編碼助手

在這個超燈中 Mistral Devstral 提供了專為面對磁盤空間限制的用戶設計的COLAB友好指南教程。在有限的存儲和內存的環境中,運行大型語言模型可能是一個挑戰,但是本教程顯示瞭如何部署強大的Devstral-Small模型。通過使用BitsandBytes,Cache Management和高效的代幣產生進行積極的量化,該教程使您通過建立一個快速,交互式和磁盤意識的輕量級助手。無論您是在旅途中調試代碼,編寫小工具還是原型製作,此設置都可以確保您的足跡最少獲得最高的性能。

!pip install -q kagglehub mistral-common bitsandbytes transformers --no-cache-dir
!pip install -q accelerate torch --no-cache-dir


import shutil
import os
import gc

教程首先安裝了必需的輕量級軟件包,例如KaggleHub,Mistral-Common,BitsandBytes和Transformers,以確保不存儲任何緩存以最大程度地減少磁盤使用情況。它還包括加速和火炬,以進行有效的模型加載和推理。為了進一步優化空間,使用Python的Shutil,OS和GC模塊清除任何預先存在的緩存或臨時目錄。

def cleanup_cache():
   """Clean up unnecessary files to save disk space"""
   cache_dirs = ('/root/.cache', '/tmp/kagglehub')
   for cache_dir in cache_dirs:
       if os.path.exists(cache_dir):
           shutil.rmtree(cache_dir, ignore_errors=True)
   gc.collect()


cleanup_cache()
print("🧹 Disk space optimized!")

為了在整個執行過程中保持最小的磁盤足跡,將Clearup_cache()函數定義為刪除冗餘高速緩存目錄,例如 /root/.cache和 /tmp /kaggleHub。這種主動的清理有助於在密鑰操作之前和之後釋放空間。調用後,該功能確認了磁盤空間已被優化,從而加強了教程對資源效率的關注。

import warnings
warnings.filterwarnings("ignore")


import torch
import kagglehub
from mistral_common.protocol.instruct.messages import UserMessage
from mistral_common.protocol.instruct.request import ChatCompletionRequest
from mistral_common.tokens.tokenizers.mistral import MistralTokenizer
from transformers import AutoModelForCausalLM, BitsAndBytesConfig

為了確保在不分散警告消息的情況下平穩執行,我們使用Python的警告模塊抑制所有運行時警告。然後,它導入用於模型交互的必需庫,包括用於張量計算的火炬,用於流式傳輸模型的KaggleHub以及用於加載量化LLM的變壓器。諸如Usermessage,ChatCompletionRequest和MistralTokenizer之類的特定於特定於特定的課程也被包裝以處理為Devstral的體系結構量身定制的令牌化和請求格式。

class LightweightDevstral:
   def __init__(self):
       print("📦 Downloading model (streaming mode)...")
      
       self.model_path = kagglehub.model_download(
           'mistral-ai/devstral-small-2505/Transformers/devstral-small-2505/1',
           force_download=False 
       )
      
       quantization_config = BitsAndBytesConfig(
           bnb_4bit_compute_dtype=torch.float16,
           bnb_4bit_quant_type="nf4",
           bnb_4bit_use_double_quant=True,
           bnb_4bit_quant_storage=torch.uint8,
           load_in_4bit=True
       )
      
       print("⚡ Loading ultra-compressed model...")
       self.model = AutoModelForCausalLM.from_pretrained(
           self.model_path,
           torch_dtype=torch.float16,
           device_map="auto",
           quantization_config=quantization_config,
           low_cpu_mem_usage=True, 
           trust_remote_code=True
       )
      
       self.tokenizer = MistralTokenizer.from_file(f'{self.model_path}/tekken.json')
      
       cleanup_cache()
       print("✅ Lightweight assistant ready! (~2GB disk usage)")
  
   def generate(self, prompt, max_tokens=400): 
       """Memory-efficient generation"""
       tokenized = self.tokenizer.encode_chat_completion(
           ChatCompletionRequest(messages=(UserMessage(content=prompt)))
       )
      
       input_ids = torch.tensor((tokenized.tokens))
       if torch.cuda.is_available():
           input_ids = input_ids.to(self.model.device)
      
       with torch.inference_mode(): 
           output = self.model.generate(
               input_ids=input_ids,
               max_new_tokens=max_tokens,
               temperature=0.6,
               top_p=0.85,
               do_sample=True,
               pad_token_id=self.tokenizer.eos_token_id,
               use_cache=True 
           )(0)
      
       del input_ids
       torch.cuda.empty_cache() if torch.cuda.is_available() else None
      
       return self.tokenizer.decode(output(len(tokenized.tokens):))


print("🚀 Initializing lightweight AI assistant...")
assistant = LightweightDevstral()

我們定義了LightWeaightDevstral類,該類是教程的核心組成部分,該類以資源有效的方式處理模型加載和文本生成。它首先使用KaggleHub流式傳輸Devstral-Small-2505型號,避免冗餘下載。然後,該模型通過BitsandBytesConfig加載了積極的4位量化,從而大大減少了內存和磁盤使用情況,同時仍可以推斷性能。從本地JSON文件初始化自定義令牌,然後立即清除緩存。生成方法採用內存安全實踐,例如torch.inference_mode()和empty_cache(),以有效地生成響應,從而使該助手甚至適用於具有緊密硬件約束的環境。

def run_demo(title, prompt, emoji="🎯"):
   """Run a single demo with cleanup"""
   print(f"\n{emoji} {title}")
   print("-" * 50)
  
   result = assistant.generate(prompt, max_tokens=350)
   print(result)
  
   gc.collect()
   if torch.cuda.is_available():
       torch.cuda.empty_cache()


run_demo(
   "Quick Prime Finder",
   "Write a fast prime checker function `is_prime(n)` with explanation and test cases.",
   "🔢"
)


run_demo(
   "Debug This Code",
   """Fix this buggy function and explain the issues:
```python
def avg_positive(numbers):
   total = sum((n for n in numbers if n > 0))
   return total / len((n for n in numbers if n > 0))
```""",
   "🐛"
)


run_demo(
   "Text Tool Creator",
   "Create a simple `TextAnalyzer` class with word count, char count, and palindrome check methods.",
   "🛠️"
)

在這裡,我們使用run_demo()函數通過緊湊的演示套件來展示模型的編碼能力。每個演示都會向Devstral Assistant發送提示,並打印生成的響應,然後立即進行內存清理,以防止在多個運行中堆積。這些示例包括編寫有效的Prime檢查功能,調試具有邏輯缺陷的Python片段,以及構建迷你Textanalyzer類。這些演示凸顯了該模型的實用性是一種輕巧的,意識的編碼助手,能夠實時代碼生成和解釋。

def quick_coding():
   """Lightweight interactive session"""
   print("\n🎮 QUICK CODING MODE")
   print("=" * 40)
   print("Enter short coding prompts (type 'exit' to quit)")
  
   session_count = 0
   max_sessions = 5 
  
   while session_count < max_sessions:
       prompt = input(f"\n({session_count+1}/{max_sessions}) Your prompt: ")
      
       if prompt.lower() in ('exit', 'quit', ''):
           break
          
       try:
           result = assistant.generate(prompt, max_tokens=300)
           print("💡 Solution:")
           print(result(:500)) 
          
           gc.collect()
           if torch.cuda.is_available():
               torch.cuda.empty_cache()
              
       except Exception as e:
           print(f"❌ Error: {str(e)(:100)}...")
      
       session_count += 1
  
   print(f"\n✅ Session complete! Memory cleaned.")

我們引入了快速編碼模式,這是一種輕巧的交互式界面,允許用戶直接向Devstral Assistant提交簡短的編碼提示。旨在限制內存使用情況,會話將互動限制為五個提示,每個提示都進行了積極的內存清理,以確保在低資源環境中持續響應。助手以簡潔,截斷的代碼建議做出回應,使此模式非常適合快速原型製作,調試或探索編碼概念,而無需壓倒筆記本的磁盤或內存容量。

def check_disk_usage():
   """Monitor disk usage"""
   import subprocess
   try:
       result = subprocess.run(('df', '-h', '/'), capture_output=True, text=True)
       lines = result.stdout.split('\n')
       if len(lines) > 1:
           usage_line = lines(1).split()
           used = usage_line(2)
           available = usage_line(3)
           print(f"💾 Disk: {used} used, {available} available")
   except:
       print("💾 Disk usage check unavailable")




print("\n🎉 Tutorial Complete!")
cleanup_cache()
check_disk_usage()


print("\n💡 Space-Saving Tips:")
print("• Model uses ~2GB vs original ~7GB+")
print("• Automatic cache cleanup after each use") 
print("• Limited token generation to save memory")
print("• Use 'del assistant' when done to free ~2GB")
print("• Restart runtime if memory issues persist")

最後,我們提供了清理例程和有用的磁盤使用率監視器。使用Python的子過程模塊使用DF -H命令,它顯示了使用和可用的磁盤空間,從而證實了模型的輕量級性質。在重新啟動清理_Cache()以確保最小殘留物之後,該腳本以一組實用的節省空間提示結束。

總之,我們現在可以利用Mistral的Devstral模型在諸如Google Colab之類的空間受限環境中的功能,而不會損害可用性或速度。該模型以高度壓縮的格式加載,執行有效的文本生成,並確保使用後立即清除內存。通過包括交互式編碼模式和演示套件,用戶可以快速無縫地測試自己的想法。


查看 代碼 這項研究的所有信用都歸該項目的研究人員。另外,請隨時關注我們 嘰嘰喳喳 而且不要忘記加入我們的 100K+ ml子雷迪特 並訂閱 我們的新聞通訊


Asif Razzaq是Marktechpost Media Inc.的首席執行官。作為一位有遠見的企業家和工程師,ASIF致力於利用人工智能的潛力來實現社會利益。他最近的努力是推出了人工智能媒體平台Marktechpost,該平台的深入覆蓋了機器學習和深度學習新聞,既在技術上都可以聽起來,既可以通過技術上的聲音,又可以被廣泛的受眾理解。該平台每月有超過200萬個觀點,說明了其在受眾中的受歡迎程度。

Source link

Scroll to Top