ਹਾਦਸੇ ਤੋਂ ਇਕਸਾਰਤਾ ਤੱਕ: AI ਵਰਕਫਲੋਅਜ਼ ਲਈ Docker
ਤੁਸੀਂ ਮਾਡਲ ਨੂੰ ਟ੍ਰੇਨ ਕੀਤਾ। ਨੋਟਬੁੱਕ ਚੱਲ ਰਹੀ ਹੈ। ਡੈਮੋ ਕੰਮ ਕਰ ਰਿਹਾ ਹੈ।
ਫਿਰ ਤੁਸੀਂ ਇਸਨੂੰ ਆਪਣੇ ਇੱਕ ਸਾਥੀ ਨੂੰ ਭੇਜਦੇ ਹੋ। ਚਾਲੀ ਮਿੰਟਾਂ ਬਾਅਦ, ਤੁਹਾਨੂੰ ਇੱਕ ਸੁਨੇਹਾ ਮਿਲਦਾ ਹੈ। ਉਨ੍ਹਾਂ ਨੂੰ CUDA ਐਰਰ ਆ ਰਿਹਾ ਹੈ। Torch ਇੰਪੋਰਟ ਨਹੀਂ ਹੋ ਰਿਹਾ। ਉਨ੍ਹਾਂ ਕੋਲ ਗਲਤ Python ਵਰਜ਼ਨ ਹੈ।
ਤੁਸੀਂ ਉਹ ਸ਼ਬਦ ਕਹਿੰਦੇ ਹੋ ਜਿਸ ਤੋਂ ਹਰ ਇੰਜੀਨੀਅਰ ਡਰਦਾ ਹੈ: "ਇਹ ਮੇਰੀ ਮਸ਼ੀਨ 'ਤੇ ਚੱਲ ਰਿਹਾ ਹੈ।"
"ਇਹ ਮੇਰੀ ਮਸ਼ੀਨ 'ਤੇ ਚੱਲ ਰਿਹਾ ਹੈ" ਇੱਕ ਇਕਬਾਲੀ ਹੈ। ਇਸਦਾ ਮਤਲਬ ਹੈ ਕਿ ਤੁਹਾਡਾ ਕੋਡ ਤੁਹਾਡੇ ਲੈਪਟਾਪ ਦੀਆਂ ਉਹਨਾਂ ਚੀਜ਼ਾਂ 'ਤੇ ਨਿਰਭਰ ਕਰਦਾ ਹੈ ਜਿਨ੍ਹਾਂ ਦਾ ਤੁਸੀਂ ਦਸਤਾਵੇਜ਼ ਨਹੀਂ ਬਣਾਇਆ। ਤੁਸੀਂ Python ਵਰਜ਼ਨ, ਸਿਸਟਮ ਲਾਇਬ੍ਰੇਰੀ, ਜਾਂ CUDA ਟੂਲਕਿੱਟ ਨੂੰ ਭੁੱਲ ਗਏ ਹੋ।
Docker ਇਸਨੂੰ ਰੋਕਦਾ ਹੈ।
ਇੱਕ ਆਮ ਵੈੱਬ ਐਪ ਵਿੱਚ ਕੁਝ ਹੀ ਡਿਪੈਂਡੈਂਸੀਆਂ ਹੁੰਦੀਆਂ ਹਨ। AI ਪ੍ਰੋਜੈਕਟਾਂ ਵਿੱਚ ਬਹੁਤ ਸਾਰੀਆਂ ਪਰਤਾਂ ਹੁੰਦੀਆਂ ਹਨ:
• Python ਪੈਕੇਜ: Torch, Transformers, ਅਤੇ Numpy। • ਸਿਸਟਮ ਲਾਇਬ੍ਰੇਰੀਆਂ: Libgl1 ਜਾਂ ffmpeg। • CUDA ਸਟੈਕ: Drivers ਅਤੇ toolkits। • ਮਾਡਲ ਵੇਟਸ (weights): ਵੱਡੀਆਂ ਫਾਈਲਾਂ ਜੋ ਤੁਹਾਡੇ ਰੈਪੋ (repo) ਵਿੱਚ ਨਹੀਂ ਹਨ। • Python ਵਰਜ਼ਨ: ਤੁਹਾਡੇ ਲੈਪਟਾਪ 'ਤੇ 3.10, ਸਰਵਰ 'ਤੇ 3.12।
ਇੱਕ requirements.txt ਫਾਈਲ ਸਿਰਫ਼ ਇੱਕ ਪਰਤ ਨੂੰ ਕੈਪਚਰ ਕਰਦੀ ਹੈ। Docker ਉਹਨਾਂ ਸਾਰੀਆਂ ਨੂੰ ਕੈਪਚਰ ਕਰਦਾ ਹੈ।
ਇੱਕ Docker image ਇੱਕ ਕੰਪਿਊਟਰ ਦਾ snapshot ਹੈ। ਇਸ ਵਿੱਚ OS, Python, ਪੈਕੇਜ ਅਤੇ ਤੁਹਾਡਾ ਕੋਡ ਸ਼ਾਮਲ ਹੁੰਦਾ ਹੈ। ਇੱਕ container ਉਸ snapshot ਦੀ ਚੱਲ ਰਹੀ ਕਾਪੀ ਹੁੰਦੀ ਹੈ।
ਇੱਕ container ਤੁਹਾਡੀ ਮਸ਼ੀਨ ਦੇ kernel ਨੂੰ ਸਾਂਝਾ ਕਰਦਾ ਹੈ। ਇਹ ਸਕਿੰਟਾਂ ਵਿੱਚ ਸ਼ੁਰੂ ਹੋ ਜਾਂਦਾ ਹੈ। ਇੱਕ image ਤੁਹਾਡੇ ਲੈਪਟਾਪ ਅਤੇ ਕਲਾਉਡ GPU ਸਰਵਰ 'ਤੇ ਇੱਕੋ ਤਰੀਕੇ ਨਾਲ ਚੱਲਦੀ ਹੈ।
ਆਪਣੀ ਰੈਸਿਪੀ ਲਿਖਣ ਲਈ Dockerfile ਦੀ ਵਰਤੋਂ ਕਰੋ। ਇੱਥੇ PyTorch ਲਈ ਇੱਕ ਟੈਂਪਲੇਟ ਹੈ:
FROM python:3.11-slim
RUN apt-get update && apt-get install -y --no-install-recommends \
build-essential \
libgl1 \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["python", "predict.py"]
ਗਲਤੀਆਂ ਤੋਂ ਬਚਣ ਲਈ ਇਹਨਾਂ ਨਿਯਮਾਂ ਦੀ ਪਾਲਣਾ ਕਰੋ:
• ਆਪਣੇ ਵਰਜ਼ਨ ਫਿਕਸ (pin) ਕਰੋ। ਸਿਰਫ਼ torch ਦੀ ਬਜਾਏ torch==2.3.1 ਦੀ ਵਰਤੋਂ ਕਰੋ। ਇਹ ਦੁਬਾਰਾ ਪੈਦਾ ਕਰਨਯੋਗਤਾ (reproducibility) ਨੂੰ ਯਕੀਨੀ ਬਣਾਉਂਦਾ ਹੈ। • ਪਹਿਲਾਂ requirements ਨੂੰ ਕਾਪੀ ਕਰੋ। ਇਹ Docker caching ਦੀ ਵਰਤੋਂ ਕਰਦਾ ਹੈ। ਜੇਕਰ ਤੁਹਾਡਾ ਕੋਡ ਬਦਲਦਾ ਹੈ ਪਰ ਤੁਹਾਡੇ ਪੈਕੇਜ ਨਹੀਂ ਬਦਲਦੇ, ਤਾਂ ਇਹ ਰੀ-ਇੰਸਟਾਲ ਨੂੰ ਛੱਡ ਕੇ ਬਿਲਡ ਨੂੰ ਤੇਜ਼ ਬਣਾਉਂਦਾ ਹੈ। • ਵੇਟਸ (weights) ਲਈ volumes ਦੀ ਵਰਤੋਂ ਕਰੋ। 5GB ਦੇ ਮਾਡਲਾਂ ਨੂੰ image ਦੇ ਅੰਦਰ ਨਾ ਰੱਖੋ। ਆਪਣੇ ਲੋਕਲ ਫੋਲਡਰ ਨੂੰ container ਨਾਲ ਜੋੜਨ ਲਈ ਇੱਕ volume ਦੀ ਵਰਤੋਂ ਕਰੋ। • ਪ੍ਰਤੀ container ਇੱਕ ਪ੍ਰੋਸੈਸ। ਆਪਣੀ API ਅਤੇ ਡਾਟਾਬੇਸ ਨੂੰ ਇੱਕ ਹੀ container ਵਿੱਚ ਨਾ ਰੱਖੋ। ਉਹਨਾਂ ਨੂੰ ਜੋੜਨ ਲਈ Docker Compose ਦੀ ਵਰਤੋਂ ਕਰੋ।
Docker ਦੇ ਨਾਲ, ਤੁਹਾਡੇ ਸਾਥੀ ਨੂੰ ਸਿਰਫ਼ ਦੋ ਕਮਾਂਡਾਂ ਦੀ ਲੋੜ ਹੈ:
git clone your-repo
docker compose up
ਹੁਣ ਹੋਰ ਐਨਵਾਇਰਨਮੈਂਟ ਐਰਰਾਂ ਨੂੰ ਡੀਬੱਗ ਕਰਨ ਦੀ ਲੋੜ ਨਹੀਂ। ਇਹ ਹਰ ਮਸ਼ੀਨ 'ਤੇ ਚੱਲਦਾ ਹੈ।
ਸਰੋਤ: https://dev.to/sachinsingh2156/from-chaos-to-consistency-docker-for-modern-ai-workflows-2gb7
ਵਿਕਲਪਿਕ ਸਿੱਖਣ ਕਮਿਊਨਿਟੀ: https://t.me/GyaanSetuAi