В этом руководстве мы рассмотрим, как создать лёгкого помощника для кодирования с помощью модели Mistral Devstral в условиях ограниченного дискового пространства. Запуск больших языковых моделей, таких как Mistral, может быть сложной задачей в средах с ограниченным объёмом памяти и дискового пространства. Однако это руководство покажет, как развернуть мощную модель devstral-small.
Установка необходимых пакетов
Для начала установим основные лёгкие пакеты, такие как kagglehub, mistral-common, bitsandbytes и transformers. Это обеспечит отсутствие кэширования для минимизации использования диска. Также включены accelerate и torch для эффективной загрузки моделей и логического вывода.
“`python
!pip install -q kagglehub mistral-common bitsandbytes transformers –no-cache-dir
!pip install -q accelerate torch –no-cache-dir
“`
“`python
import shutil
import os
import gc
“`
Очистка кэша
Чтобы поддерживать минимальный размер диска во время выполнения, определена функция cleanup_cache() для удаления ненужных каталогов кэша, таких как `/root/.cache` и `/tmp/kagglehub`.
“`python
def cleanup_cache():
“””Clean up unnecessary files to save disk space”””
cache_dirs = [‘/root/.cache’, ‘/tmp/kagglehub’]
for cachedir in cachedirs:
if os.path.exists(cache_dir):
shutil.rmtree(cachedir, ignoreerrors=True)
gc.collect()
cleanup_cache()
print(” Disk space optimized!”)
“`
Инициализация LightweightDevstral
Мы определяем класс LightweightDevstral, который обрабатывает загрузку модели и генерацию текста эффективным с точки зрения ресурсов образом.
“`python
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
class LightweightDevstral:
def init(self):
print(” Downloading model (streaming mode)…”)
self.modelpath = kagglehub.modeldownload(
‘mistral-ai/devstral-small-2505/Transformers/devstral-small-2505/1’,
force_download=False
)
quantization_config = BitsAndBytesConfig(
bnb4bitcompute_dtype=torch.float16,
bnb4bitquant_type=”nf4″,
bnb4bitusedoublequant=True,
bnb4bitquant_storage=torch.uint8,
loadin4bit=True
)
print(” Loading ultra-compressed model…”)
self.model = AutoModelForCausalLM.from_pretrained(
self.model_path,
torch_dtype=torch.float16,
device_map=”auto”,
quantizationconfig=quantizationconfig,
lowcpumem_usage=True,
trustremotecode=True
)
self.tokenizer = MistralTokenizer.fromfile(f'{self.modelpath}/tekken.json’)
cleanup_cache()
print(” Lightweight assistant ready! (~2GB disk usage)”)
def generate(self, prompt, max_tokens=400):
“””Memory-efficient generation”””
tokenized = self.tokenizer.encodechatcompletion(
ChatCompletionRequest(messages=[UserMessage(content=prompt)])
)
input_ids = torch.tensor([tokenized.tokens])
if torch.cuda.is_available():
inputids = inputids.to(self.model.device)
with torch.inference_mode():
output = self.model.generate(
inputids=inputids,
maxnewtokens=max_tokens,
temperature=0.6,
top_p=0.85,
do_sample=True,
padtokenid=self.tokenizer.eostokenid,
use_cache=True
)[0]
del input_ids
torch.cuda.emptycache() if torch.cuda.isavailable() else None
return self.tokenizer.decode(output[len(tokenized.tokens):])
“`
Демонстрация
Здесь мы демонстрируем возможности модели с помощью компактного набора демонстраций, используя функцию run_demo(). Каждая демонстрация отправляет запрос помощнику Devstral и выводит сгенерированный ответ, сразу же очищая память, чтобы предотвратить накопление данных при многократных запусках.
“`python
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.”,
“”
)
“`
Быстрый режим кодирования
Мы представляем режим Quick Coding Mode, лёгкий интерактивный интерфейс, который позволяет пользователям отправлять короткие запросы для кодирования непосредственно помощнику Devstral.
“`python
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 sessioncount < maxsessions:
prompt = input(f”\n[{sessioncount+1}/{maxsessions}] 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.”)
“`
Мониторинг использования диска
Наконец, мы предлагаем процедуру очистки и полезный монитор использования диска. Используя команду df -h через модуль Python subprocess, он отображает, сколько дискового пространства используется и доступно, подтверждая лёгкость модели.
“`python
def checkdiskusage():
“””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()
checkdiskusage()
“`
Советы по экономии места
- Модель использует около 2 ГБ вместо оригинальных 7 ГБ+.
- Автоматическая очистка кэша после каждого использования.
- Ограниченная генерация токенов для экономии памяти.
- Используйте `del assistant`, когда закончите, чтобы освободить около 2 ГБ.
- Перезапустите среду выполнения, если проблемы с памятью сохраняются.
В заключение, мы можем использовать возможности модели Mistral Devstral в средах с ограниченными ресурсами, таких как Google Colab, без ущерба для удобства использования или скорости. Модель загружается в сильно сжатом формате, выполняет эффективную генерацию текста и обеспечивает своевременное освобождение памяти после использования.
1. Какие инструменты и библиотеки используются для установки и работы с моделью Mistral Devstral в условиях ограниченного дискового пространства?
Ответ: для установки и работы с моделью Mistral Devstral используются следующие инструменты и библиотеки: kagglehub, mistral-common, bitsandbytes, transformers, accelerate и torch.
2. Какие шаги предпринимаются для оптимизации использования дискового пространства при работе с моделью?
Ответ: для оптимизации использования дискового пространства при работе с моделью Mistral Devstral в условиях ограниченного дискового пространства выполняются следующие шаги:
* установка основных лёгких пакетов без кэширования для минимизации использования диска;
* определение функции cleanup_cache() для удаления ненужных каталогов кэша;
* использование автоматической очистки кэша после каждого использования модели.
3. Как модель Mistral Devstral обеспечивает эффективное использование памяти при генерации текста?
Ответ: модель Mistral Devstral обеспечивает эффективное использование памяти при генерации текста за счёт:
* загрузки модели в сильно сжатом формате;
* выполнения эффективной генерации текста с учётом ограничений памяти;
* своевременного освобождения памяти после использования модели.
4. Какие параметры и настройки используются для инициализации LightweightDevstral и как они влияют на работу модели?
Ответ: для инициализации LightweightDevstral используются следующие параметры и настройки:
* определение пути к модели через kagglehub.model_download;
* настройка конфигурации квантизации для загрузки модели в 4-битном формате;
* использование AutoModelForCausalLM для загрузки модели и генерации текста.
Эти параметры и настройки влияют на работу модели, обеспечивая её эффективное использование ресурсов и минимизацию использования дискового пространства.
5. Какие советы даются в статье для экономии места при работе с моделью Mistral Devstral?
Ответ: в статье даются следующие советы для экономии места при работе с моделью Mistral Devstral:
* использование модели в сильно сжатом формате (около 2 ГБ вместо оригинальных 7 ГБ+);
* автоматическая очистка кэша после каждого использования;
* ограниченная генерация токенов для экономии памяти;
* использование команды del assistant для освобождения около 2 ГБ после завершения работы с моделью;
* перезапуск среды выполнения, если проблемы с памятью сохраняются.