В этом руководстве мы рассмотрим, как создать лёгкого помощника для кодирования с помощью модели 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 ГБ после завершения работы с моделью;
* перезапуск среды выполнения, если проблемы с памятью сохраняются.