DeepSeek: Optimalisasi Memori, Selesaikan ...

Tarikh: 21 Jun 2026

Dunia Kecerdasan Buatan (AI) sedang berkembang pesat, menawarkan peluang transformasi digital yang signifikan untuk pelbagai sektor, termasuk Perusahaan Kecil dan Sederhana (PKS) di Malaysia. Model bahasa besar (LLM) seperti DeepSeek AI telah menjadi alat yang sangat berkuasa, membolehkan aplikasi canggih daripada pemprosesan bahasa semula jadi hingga analisis data kompleks. Walau bagaimanapun, penggunaan model ini sering berdepan dengan satu cabaran teknikal yang kritikal: ralat Memori Habis (Out Of Memory - OOM) pada unit pemprosesan grafik (GPU) atau lebih lazim dikenali sebagai kad grafik. Ralat OOM berlaku apabila model AI, terutamanya LLM yang bersaiz besar, cuba menggunakan lebih banyak memori GPU daripada yang tersedia, menyebabkan proses terhenti dan kerja-kerja pengkomputeran tergendala. Artikel ini akan menghuraikan secara mendalam strategi pengoptimuman memori untuk DeepSeek, membimbing anda langkah demi langkah bagi menyelesaikan ralat OOM dan seterusnya meningkatkan kecekapan operasi AI anda.

Memahami Punca Ralat OOM dalam Pengkomputeran AI

Sebelum menyelami penyelesaian, adalah penting untuk memahami mengapa ralat OOM ini kerap berlaku, terutamanya apabila bekerja dengan model seperti DeepSeek. LLM moden adalah sangat besar, dengan berjuta-juta atau berbilion parameter. Setiap parameter memerlukan ruang memori untuk disimpan, bersama dengan data input, output, dan pengantara yang dihasilkan semasa inferens atau latihan.

Saiz Model dan Parameter

Model DeepSeek, seperti LLM lain, boleh mempunyai pelbagai saiz. Versi yang lebih besar, walaupun menawarkan prestasi dan keupayaan yang lebih baik, memerlukan memori GPU yang jauh lebih tinggi. Saiz model adalah pemacu utama penggunaan memori; model 7 bilion parameter (7B) akan menggunakan memori yang kurang daripada model 67 bilion parameter (67B).

Saiz Batch (Batch Size)

Saiz batch merujuk kepada bilangan sampel data yang diproses secara serentak oleh model. Memproses data dalam batch yang lebih besar boleh mempercepatkan inferens dan latihan kerana GPU dapat memanfaatkan pengkomputeran selari dengan lebih baik. Walau bagaimanapun, setiap sampel dalam batch memerlukan memorinya sendiri, jadi saiz batch yang lebih besar akan meningkatkan penggunaan memori secara mendadak.

Panjang Konteks (Context Length)

LLM seperti DeepSeek memproses urutan teks. Panjang konteks adalah bilangan token maksimum yang boleh diproses oleh model dalam satu masa. Apabila panjang konteks meningkat, jumlah memori yang diperlukan untuk menyimpan embeddings, attention weights, dan data lain yang berkaitan dengan urutan itu juga meningkat secara linear, atau dalam beberapa kes, secara kuadratik.

Jenis Data (Data Types)

Secara lalai, kebanyakan rangka kerja AI menggunakan ketepatan tunggal (single-precision) atau float32 (FP32) untuk nombor. Setiap nombor FP32 menggunakan 32 bit memori. Walau bagaimanapun, kebanyakan operasi inferens dan latihan tidak memerlukan ketepatan setinggi ini. Menggunakan jenis data ketepatan rendah seperti float16 (FP16) atau bfloat16 (BF16) boleh mengurangkan penggunaan memori separuh, kerana ia hanya menggunakan 16 bit setiap nombor.

Strategi Pengoptimuman Memori untuk DeepSeek

Dengan pemahaman tentang punca-punca ini, kita kini boleh meneroka pelbagai strategi untuk mengoptimumkan penggunaan memori dan mengelakkan ralat OOM.

Papan litar elektronik yang memaparkan mikrocip dan komponen kecil, melambangkan teknologi kad grafik dan pengkomputeran canggih. *Imej: Papan litar elektronik yang memaparkan mikrocip dan komponen kecil, melambangkan teknologi kad grafik dan pengkomputeran canggih.*

Reduksi Saiz Model dan Kuantisasi

Salah satu cara paling berkesan untuk mengurangkan penggunaan memori adalah dengan menggunakan model yang lebih kecil atau mengecilkan model sedia ada melalui kuantisasi.

Menggunakan Versi Model Lebih Kecil

Jika projek anda tidak memerlukan kapasiti penuh DeepSeek yang paling besar, pertimbangkan untuk menggunakan versi model yang mempunyai bilangan parameter yang lebih rendah (contohnya, DeepSeek-7B berbanding DeepSeek-67B). Ini serta-merta mengurangkan jejak memori dengan ketara.

Kuantisasi (Quantization)

Kuantisasi adalah proses mengurangkan ketepatan nombor yang digunakan untuk mewakili parameter model dan aktivasi.

  • Int8 Quantization: Mengubah parameter daripada FP32 kepada 8-bit integer. Ini boleh mengurangkan saiz model sebanyak 4 kali ganda dengan impak minimum terhadap prestasi. Pustaka seperti bitsandbytes menyediakan alatan yang cekap untuk ini, membolehkan anda memuatkan LLM besar pada kad grafik dengan VRAM yang lebih rendah.
  • Int4 Quantization: Mengurangkan lagi kepada 4-bit integer, memberikan pengurangan saiz model sebanyak 8 kali ganda. Ini biasanya mempunyai impak yang sedikit lebih ketara pada prestasi tetapi membolehkan model yang lebih besar dimuatkan pada perkakasan yang sangat terhad.

Untuk mengaplikasikan kuantisasi dengan DeepSeek menggunakan pustaka Transformers oleh Hugging Face, anda boleh melakukan seperti ini:

from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig
import torch

# Konfigurasi BitsAndBytes untuk kuantisasi 8-bit
bnb_config = BitsAndBytesConfig(
    load_in_8bit=True,
    bnb_4bit_quant_type="nf4", # atau "fp4"
    bnb_4bit_compute_dtype=torch.bfloat16,
    bnb_4bit_use_double_quant=True,
)

model_id = "deepseek-ai/deepseek-llm-7b-base" # Gantikan dengan model DeepSeek pilihan anda

# Memuatkan model dengan konfigurasi kuantisasi
model = AutoModelForCausalLM.from_pretrained(model_id, quantization_config=bnb_config, device_map="auto")
tokenizer = AutoTokenizer.from_pretrained(model_id)

Ini akan memuatkan model DeepSeek secara automatik dalam mod 8-bit atau 4-bit, secara drastik mengurangkan keperluan VRAM.

Pengurusan Saiz Batch (Batch Size)

Mengurangkan saiz batch adalah penyelesaian yang paling mudah dan selalunya berkesan untuk masalah OOM.

  • Inferens: Jika anda menjalankan inferens, cuba set batch_size=1. Ini memastikan model memproses satu input pada satu masa, menggunakan memori minimum.
  • Latihan: Untuk latihan, mulakan dengan saiz batch yang sangat kecil (contohnya, 1 atau 2) dan secara beransur-ansur meningkatkannya sehingga anda mencapai had memori GPU anda. Teknik seperti "gradient accumulation" boleh digunakan untuk mensimulasikan saiz batch yang lebih besar semasa latihan tanpa meningkatkan penggunaan memori secara langsung.

Strategi Pengurangan Konteks

Jika panjang konteks DeepSeek secara lalai terlalu besar untuk kad grafik anda, anda boleh mempertimbangkan untuk memendekkan input anda.

  • Pengekstrakan Maklumat Utama: Pra-proses input anda untuk hanya mengekstrak maklumat yang paling relevan.
  • Pembahagian Input: Bahagikan input yang panjang kepada segmen yang lebih kecil dan proses setiap segmen secara berasingan, kemudian gabungkan hasilnya. Ini mungkin memerlukan logik tambahan untuk mengekalkan konsistensi.

Pilihan Jenis Data

Menggunakan ketepatan yang lebih rendah seperti FP16 atau BF16 adalah satu lagi cara ampuh untuk mengurangkan penggunaan memori tanpa menjejaskan prestasi secara signifikan.

Ketepatan Campuran (Mixed-Precision Training/Inference)

Kebanyakan rangka kerja AI moden seperti PyTorch menyokong ketepatan campuran secara natif. Ini bermakna sebahagian operasi dijalankan dalam FP16 (untuk menjimatkan memori dan mempercepatkan) manakala operasi kritikal lain (seperti pengemaskinian bobot) dijalankan dalam FP32 untuk mengekalkan kestabilan dan ketepatan.

import torch

# Untuk inferens:
model = model.half() # Tukar model kepada FP16
model = model.to("cuda")

# Jika anda menggunakan torch.amp untuk ketepatan campuran semasa latihan:
scaler = torch.cuda.amp.GradScaler()
with torch.cuda.amp.autocast():
    output = model(input_data)
    loss = criterion(output, target)
scaler.scale(loss).backward()
scaler.step(optimizer)
scaler.update()

bfloat16 (BF16) adalah format yang sangat disyorkan untuk LLM kerana ia mempunyai julat dinamik yang lebih luas daripada FP16, mengurangkan keperluan untuk "loss scaling" dan sering memberikan hasil yang lebih stabil. GPU NVIDIA moden (Ampere dan ke atas) mempunyai sokongan perkakasan untuk BF16.

Offloading dan Swap

Apabila memori GPU adalah kritikal, anda boleh menggunakan strategi untuk mengalih keluar bahagian model ke memori sistem (RAM) atau bahkan ke storan cakera (swap).

CPU Offloading

Pustaka seperti accelerate oleh Hugging Face membolehkan anda memuatkan sebahagian lapisan model ke CPU dan sebahagian lagi ke GPU. Ini membolehkan anda memuatkan model yang sangat besar yang tidak muat sepenuhnya ke dalam satu GPU.

from accelerate import Accelerator
from transformers import AutoModelForCausalLM, AutoTokenizer

accelerator = Accelerator()

model_id = "deepseek-ai/deepseek-llm-67b-base" # Contoh model DeepSeek yang lebih besar
model = AutoModelForCausalLM.from_pretrained(model_id, device_map="auto")
tokenizer = AutoTokenizer.from_pretrained(model_id)

# Model akan dimuatkan secara automatik ke GPU dan CPU mengikut ketersediaan memori
# jika `device_map="auto"` digunakan dengan `accelerate` terpasang.

device_map="auto" adalah sangat berkesan dan secara bijak mengagihkan model merentasi peranti yang tersedia.

Teknik Swap Memori

Sesetengah pustaka juga menyokong 'swapping' bahagian model ke cakera apabila tidak digunakan, dan memuatkannya semula apabila diperlukan. Ini sangat perlahan tetapi boleh menjadi pilihan terakhir untuk memuatkan model yang sangat besar pada sistem dengan memori yang sangat terhad.

Penggunaan Library Optimal dan Teknik Lanjutan

Beberapa pustaka dan teknik telah direka khas untuk menangani masalah memori dalam LLM.

DeepSpeed dan FSDP (Fully Sharded Data Parallel)

DeepSpeed oleh Microsoft dan FSDP oleh PyTorch adalah rangka kerja pengoptimuman yang canggih yang memecahkan (sharding) model merentasi berbilang GPU atau node. Ini membolehkan setiap GPU hanya menyimpan sebahagian kecil daripada model, pengoptimum, dan data gradien. Walaupun DeepSeek sendiri mungkin tidak secara langsung memerlukan DeepSpeed untuk inferens pada satu GPU, teknik serupa digunakan dalam device_map="auto" untuk mengagihkan beban.

torch.no_grad() dan model.eval()

Semasa inferens (iaitu, apabila anda hanya ingin menjana output tanpa mengemas kini bobot model), pastikan anda menggunakan torch.no_grad() dan model.eval().

  • torch.no_grad(): Melumpuhkan pengiraan gradien, yang menjimatkan memori kerana ia tidak perlu menyimpan graf pengiraan untuk backpropagation.
  • model.eval(): Menetapkan model ke mod penilaian, yang melumpuhkan lapisan seperti Dropout dan BatchNorm yang berkelakuan berbeza semasa latihan dan inferens. Kedua-duanya adalah penting untuk mengurangkan penggunaan memori dan memastikan inferens yang cekap.
import torch

model.eval() # Pastikan model dalam mod evaluasi
with torch.no_grad():
    input_ids = tokenizer.encode("Tulis resipi untuk Nasi Lemak:", return_tensors="pt").to("cuda")
    output = model.generate(input_ids, max_length=100)
    print(tokenizer.decode(output[0]))
Paparan skrin yang menunjukkan graf dan analisis data, melambangkan pemantauan prestasi dan pengoptimuman. *Imej: Paparan skrin yang menunjukkan graf dan analisis data, melambangkan pemantauan prestasi dan pengoptimuman.*

Pemantauan dan Debugging

Memantau penggunaan memori GPU anda adalah penting untuk mendiagnosis masalah OOM dan menilai keberkesanan strategi pengoptimuman anda.

nvidia-smi dan gpustat

Gunakan nvidia-smi (arahan baris perintah yang disertakan dengan pemacu NVIDIA) atau gpustat (pustaka Python pihak ketiga yang lebih mesra pengguna) untuk memantau penggunaan VRAM dalam masa nyata.

nvidia-smi
# atau
gpustat

Ini akan menunjukkan berapa banyak memori GPU yang digunakan oleh setiap proses.

torch.cuda.memory_summary()

Jika anda menggunakan PyTorch, torch.cuda.memory_summary() menyediakan laporan terperinci tentang penggunaan memori CUDA, termasuk memori yang diperuntukkan dan memori cache. Ini amat berguna untuk mengenal pasti kebocoran memori.

import torch
print(torch.cuda.memory_summary())

Konfigurasi Persekitaran yang Betul

Memastikan persekitaran perisian anda dikonfigurasi dengan betul juga memainkan peranan penting dalam mengoptimumkan penggunaan memori.

Pemasangan Pustaka dan Pemacu Terkini

Pastikan pemacu kad grafik NVIDIA anda adalah yang terkini. Versi pemacu yang lebih baharu selalunya merangkumi pengoptimuman prestasi dan memori. Begitu juga, pastikan PyTorch, Transformers, dan pustaka lain yang berkaitan dikemas kini kepada versi terkini.

  • pip install --upgrade torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121 (gantikan cu121 dengan versi CUDA anda)
  • pip install --upgrade transformers accelerate bitsandbytes

Penyediaan Perkakasan

Walaupun pengoptimuman perisian boleh membantu, had perkakasan tetap wujud. Untuk projek AI yang serius, terutamanya dengan LLM seperti DeepSeek, kad grafik dengan VRAM yang mencukupi (contohnya, NVIDIA RTX 3090/4090 dengan 24GB VRAM atau kad grafik gred pusat data seperti A100/H100) adalah sangat disyorkan. PKS di Malaysia yang ingin memanfaatkan AI mungkin perlu melabur dalam infrastruktur pengkomputeran yang sesuai atau mempertimbangkan penyelesaian awan yang menawarkan GPU berkuasa.

Impak Terhadap PKS di Malaysia

Bagi PKS di Malaysia yang dalam fasa transformasi digital, mengatasi ralat OOM adalah kunci untuk memanfaatkan sepenuhnya potensi AI. Dengan mengoptimumkan penggunaan memori, PKS boleh:

  • Mengurangkan Kos Infrastruktur: Menggunakan kad grafik sedia ada dengan lebih cekap, melambatkan keperluan untuk peningkatan perkakasan yang mahal.
  • Mempercepatkan Pembangunan AI: Mengelakkan gangguan OOM membolehkan pembangunan dan prototaip model AI berjalan lebih lancar dan pantas.
  • Meningkatkan Kecekapan Operasi: Mengaplikasikan DeepSeek atau LLM lain untuk analisis data, perkhidmatan pelanggan (chatbot), dan automasi proses tanpa had memori yang melumpuhkan.
  • Demokratisasi AI Lanjutan: Membolehkan akses kepada model AI yang lebih canggih walaupun dengan sumber daya pengkomputeran yang terhad, merapatkan jurang teknologi antara perniagaan kecil dan besar.

Cabaran dan Pertimbangan

Walaupun strategi pengoptimuman ini sangat berkesan, terdapat beberapa pertimbangan:

  • Imbangan Prestasi vs. Memori: Sesetengah pengoptimuman (seperti kuantisasi yang agresif atau swapping ke cakera) boleh menjejaskan kelajuan inferens atau ketepatan model. Anda perlu mencari imbangan yang sesuai untuk aplikasi anda.
  • Kompleksiti Implementasi: Sesetengah teknik lanjutan memerlukan pemahaman yang lebih mendalam tentang struktur model dan rangka kerja AI.
  • Penyelesaian Bertingkat: Selalunya, gabungan beberapa strategi akan memberikan hasil terbaik. Mulakan dengan yang paling mudah (kurangkan saiz batch, gunakan FP16) dan teruskan ke teknik yang lebih canggih jika perlu.

Kesimpulan

Ralat OOM kad grafik adalah halangan biasa dalam perjalanan menggunakan model AI berkuasa seperti DeepSeek, tetapi ia bukanlah penghalang jalan yang tidak boleh diatasi. Dengan memahami punca-punca utama dan mengaplikasikan strategi pengoptimuman memori yang dibincangkan, daripada kuantisasi dan pengurusan saiz batch hingga penggunaan jenis data ketepatan rendah dan offloading, anda boleh memastikan projek AI anda berjalan dengan lancar dan cekap. Bagi PKS di Malaysia, penguasaan teknik-teknik ini bukan sahaja menjimatkan sumber tetapi juga membuka pintu kepada inovasi dan daya saing dalam era transformasi digital. Teruslah bereksperimen, memantau, dan mengoptimumkan, dan kad grafik anda akan mampu menggerakkan DeepSeek untuk tugas-tugas AI anda.