<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های صادق رئیس کرمی</title>
        <link>https://virgool.io/feed/@smsrk741</link>
        <description>Interested In DevOps</description>
        <language>fa</language>
        <pubDate>2026-06-25 16:40:57</pubDate>
        <image>
            <url>https://static.virgool.io/images/default-avatar.jpg</url>
            <title>صادق رئیس کرمی</title>
            <link>https://virgool.io/@smsrk741</link>
        </image>

                    <item>
                <title>آموزش داکر (قسمت اول: مفاهیم لینوکس)</title>
                <link>https://virgool.io/@smsrk741/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D8%AF%D8%A7%DA%A9%D8%B1%D9%82%D8%B3%D9%85%D8%AA-%D8%A7%D9%88%D9%84%D9%85%D9%81%D8%A7%D9%87%DB%8C%D9%85-%D9%84%DB%8C%D9%86%D9%88%DA%A9%D8%B3-zrcdtaydkfha</link>
                <description>کانتینر چیست؟کانتینرها در لینوکس در واقع مجموعه‌ای از یک یا چند process هستند که از بقیه سیستم جدا و ایزوله شده‌اند. کانتینرها این قابلیت را به ما می دهند که application خود را همراه با تمام نیازمندی های زمان اجرا و فایل های مورد نیاز خود در کنار هم داشته باشیم، به این معنی که کانتینرهای لینوکس در حین مراحل توسعه، تست و در نهایت تولید، قابل جابجایی و سازگار هستند.چرا باید از کانتینرهای لینوکس استفاده کنیم؟تصور کنید در حال توسعه یک اپلیکیشن هستید و شما کارتان را روی لپ‌تاپ انجام می‌دهید و محیط شما تنظیمات خاصی دارد. دولوپرها ممکن است پیکربندی های متفاوتی داشته باشند. برنامه ای که در حال توسعه آن هستید به آن پیکربندی متکی است و به کتابخانه ها، وابستگی ها و فایل های خاصی نیاز دارد. در همین حال، کسب‌وکار شما دارای محیط‌های develop و production است که با پیکربندی‌های خاص خود و مجموعه فایل‌های پشتیبانی خود کانفیگ شده‌اند. شما می خواهید محیط های دیگری که دارید را تا جای ممکن شبیه محیط لوکال خود بکنید، اما بدون همه هزینه های کانفیگ محیط های سرور و غیره.بنابراین، چگونه می‌توانید برنامه خود را در این محیط‌ها اجرا کنید، تست ها را با موفقیت انجام دهید و برنامه خود را بدون دردسر، دولوپ و دیباگ اجرا کنید؟ با استفاده از کانتینر ها.مفهوم namespace در لینوکسیکی از ویژگی های کرنل لینوکس namespace ها هستند که منابع سیستم را به گونه ای پارتیشن بندی می کنند که یک مجموعه از پراسس ها فقط مجموعه ای از منابع را می بینند، در حالی که مجموعه دیگری از پراسس ها، مجموعه متفاوتی از منابع را می بینند. به بیان دیگر؛ در واقع با استفاده از این ویژگی میتوان منابع را برای یک سری از پراسس ها ایزوله کرد.در ادامه 4 مورد از مهم ترین آن ها را بررسی میکنیم:PIDاین namespace دقیقا خود process id ها را ایزوله میکند. در واقع در هر کانتینر می‌توان process hierarchy مجزایی داشته باشیم.USERاین namespace آیدی های یوزر ها و گروه ها را ایزوله می‌کند. در واقع می‌توانیم داخل کانتینر یوزر روت داشته باشیم که بیرون از کانتینر، فقط یک یوزر عادی میباشد.NETWORKاین namespace دستگاه های شبکه، جداول روتینگ، iptables و... را ایزوله می‌کند. بطور مثال هر کانتینر بتواند شبکه ی خودش را داشته باشد و بتوانیم روی یک سیستم همزمان دو کانتینر داشته باشیم که به پورت ۸۰ خودشان گوش می‌دهند.MOUNTاین namespace ماونت پوینت ها را برای هر پراسس و کانتینر ایزوله می‌کند. در واقع هر کانتینر می‌تواند یک روت دایرکتوری متفاوت داشته باشد که بسیار امن تر از chroot میباشد زیرا در chroot امکان ایزوله کردن وجود ندارد.مثالی از پراسس های مختلف در نیم اسپیس هابا استفاده از دستور زیر میتوان در لینوکس یک namespace ساخت:sudo unshare –pid–fork –mount-proc -- bashهمچنین با این دستور میتوانید لیست namespace ها را مشاهده کنید:lsns --output-allو در نهایت برای کاربرد های بیشتر میتوانید از دستور زیر استفاده کنید:unshare –helpمفهوم control groups در لینوکسیک cgroup یک ویژگی از کرنل لینوکس است که استفاده از منابع (CPU، حافظه، ورودی/خروجی دیسک، شبکه و غیره) مجموعه‌ای از پراسس ها را محدود می‌کند.وظایف cgroup هاRESOURCE LIMITشما می توانید یک cgroup را پیکربندی کنید تا میزان استفاده از یک ریسورس خاص (مثلاً حافظه یا CPU) را محدود کند.PRIORITIZATIONشما می توانید کنترل کنید که یک پردازش چه مقدار از یک ریسورس (CPU، دیسک، یا شبکه) را می تواند در مقایسه با پراسس های موجود در cgroup دیگر زمانی که اختلاف منابع وجود دارد استفاده کند.ACCOUNTINGمحدودیت های ریسورس در سطح cgroup نظارت و گزارش می شوند.CONTROLمی‌توانید وضعیت (تجمیع، توقف یا راه‌اندازی مجدد) همه پراسس های یک cgroup را با یک فرمان تغییر دهید.در این مقاله سعی کردیم تا مفاهیم اولیه لینوکس که برای شروع کار با داکر ضروری هستند را پوشش دهیم.در قسمت های بعدی, به بررسی جزئیات بیشتری از مفاهیم لینوکس در داکر و کاربرهای آن میپردازیم.</description>
                <category>صادق رئیس کرمی</category>
                <author>صادق رئیس کرمی</author>
                <pubDate>Fri, 31 May 2024 18:35:20 +0330</pubDate>
            </item>
                    <item>
                <title>راه اندازی کودا (CUDA) در داکر (DOCKER)</title>
                <link>https://virgool.io/targoman/%D8%B1%D8%A7%D9%87-%D8%A7%D9%86%D8%AF%D8%A7%D8%B2%DB%8C-%DA%A9%D9%88%D8%AF%D8%A7-cuda-%D8%AF%D8%B1-%D8%AF%D8%A7%DA%A9%D8%B1-docker-fcmaung9y3gl</link>
                <description>در این مقاله قصد داریم توضیح بدیم که CUDA چیه و چه قابلیتی رو برای ما فراهم کرده که در ابتدا توضیحات مختصری در مورد CPU , GPU و تفاوت اونا میگیم در ادامه کودا رو مورد برررسی قرار میدیم تعریفش میکنیم در مورد مباحثی که برای خیلی ها اشتباه ایجاد میکنه پیرامون کودا و در نهایت هم که بخش عملی این پست هستش کانفیگ یک سرور لینوکسی برای استفاده از GPU تحت داکر رو انجام میدیم که با نصب درایور انویدیا و توضیحات شروع میشه و در نهایت کانتینر تنسرفلو رو ران میکنیم و تستش میکنیم که ایا از GPU استفاده میکنه یا نه.سی پی یو CPUپردازنده، واحد پردازش مرکزی کامپیوتر است که اجرای تمام دستورالعمل‌ها رو مدیریت می‌کنه و اغلب به اون مغز کامپیوتر میگن.جی پی یو GPUپردازنده گرافیکی یا Graphic Processor Unit که به اختصار GPU گفته می شه، قطعه ای است که روی کارت های گرافیک و همچنین گرافیک های آنبورد قرار داده می شه. این قطعه به صورت مجزا از CPU کار پردازش و رندرینگ تصاویر رو انجام می ده. کارت گرافیک اطلاعات رو برای پردازش تصویر ترجمه می‌کنه و خروجی رو روی صفحه نمایش نمایش میده. هر چی کارت گرافیک در نمایش تصویر سریعتر باشد، خروجی بصری بهتری داریم.تفاوت اصلی CPU و GPUنکته ای که در مورد این تفاوت باید در نظر داشته باشیم و خیلی ها درباره اون اشتباه میکنن، نحوه کار و دستوراتی هست که اجرا می‌شه. در واقع CPU به ازای هر هسته تو هر کلاک می‌تونه یک دستور متفاوت انجام بده در نتیجه یک CPU با ۴ هسته در هر کلاک ۴ تا دستور که می‌تونن کاملا بی‌ربط به هم باشن رو انجام می‌ده. اما در GPU تو هر کلاک تعداد محدودی دستور روی حجم بزرگی از داده بخش بندی شده اجرا می‌شه. به طور مثال همه ۲۵۶۰ هسته یک GTX1080 در هر کلاک فقط یک یا چند دستور محدود رو می‌تونن اجرا کنن اما هر کدوم دارن اون دستور رو روی بخشی از داده‌ها اجرا می‌کنن.  یک تفاوت مهم دیگه اینکه تعداد دستورات در GPU نسبت به CPU خیلی کمتره و فقط برای محاسبات ریاضی مناسبه اما CPU توانایی انجام عملیات خیلی گسترده‌تری داره.کودا CUDAطبق توضیحات انویدیا CUDA در واقع یک پلتفرم پردازش موازی و مدل برنامه نویسی هستش که توسط انویدیا ساخته شده .تعریف CUDA رو میشه به دو قسمت تقسیم کرد که قسمت اول میشه Parallel Computing Platform و قسمت دوم Programming Model.کودا در واقع سرواژه Compute Unified Device Architecture هستش که همونطور که از تعریفش مشخصه یک معماری ای هستش که این قابلیت رو به GPU میده که پردازش های سنگین رو خیلی سریع و همزمان اجرا کند.توضیحات بیشتر در مورد قسمت دوم تعریف در ادامه میشه.کانفیگ سرور لینوکسی از صفر برای استفاده از GPUنصب NVIDIA-Driverبرای استفاده از جی پی یو در هر سیستم عامل و به هر شکلی قطعا نیاز به نصب بودن درایور انویدیا متناسب با سیستم عامل میزبان هستش.نصب انویدیا درایور ۶ مرحله داره که در زیر هر مرحله رو جداگونه بررسی میکنیم.1- بررسی اینکه GPU کودا (CUDA) رو ساپورت میکنه یا نهlspci | grep -i nvidiaدستور lspci یک ابزار کاربردی در سیستم‌های لینوکس است که برای یافتن اطلاعات مربوط به گذرگاه‌های PCI و دستگاه‌های متصل به زیرسیستم PCI استفاده میشه.در ادامه باید مدل GPU رو داخل سایت زیر بررسی کرد برای پشتیبانی CUDA https://developer.nvidia.com/cuda-gpus 2-بررسی اینکه ورژن استانداردی از لینوکس نصب هست یا نهuname -m &amp;&amp; cat /etc/&amp;release3-بررسی اینکه system build tools هایی مانند GCC نصب هست یا نهgcc --version4-بررسی اینکه سیستم linux header مناسبی داره یا نه و نصب آن هاuname -r

#Install linux headers
sudo apt-get install linux-headers-$(uname -r)5-انتخاب NVIDIA-DRIVER مناسب برای سیستم عامل#first way
ubuntu-drivers devices
#second way
apt search nvidia-driver6-نصب درایور#install driver
sudo apt install nvidia-drver-515-server
#reboot system
sudo rebootبعد از نصب درایور متناسب با سیستم عامل اگر نصب با موفقیت انجام شده باشه با استفاده از دستور nvidia-smi که همراه درایور نصب میشه روی سیستم میتونیم چک کنیم.کاربرد NVIDIA-SMIاینترفیس مدیریت سیستم های انویدیا NVIDIA (NVIDIA-SMI) یک ابزار خط فرمانه که بر پایه کتابخانه مدیریت NVIDIA (NVML) ساخته شده که برای کمک به مدیریت و نظارت به دستگاه های گرافیکی NVIDIA طراحی شده .کاربرد NVMLیک API نوشته شده با زبان C هستش که برای نظارت و مدیریت وضعیت‌های مختلف دستگاه‌های GPU NVIDIA نوشته شده که امکان دسترسی مستقیم به پرس و جوها و دستورات خروجی از طریق NVIDIA-SMI رو فراهم می کنه.کودا تولکیت(CUDA TOOLKIT)کودا تولکیت (CUDA TOOLKIT)توسط انویدیا معرفی شد و هر چیزی که برای توسعه برنامه های GPU مورد نیاز هست رو داخل خودش داره مثل کامپایلرهای مناسب برای برنامه های CUDA ,کتابخونه های مختلف مناسب برای برنامه های جی پی یو , IDES , دیباگر و CUDA RUNTIME .با نصب nvidia-driver دیگه نیازی به نصب درایور cuda روی سرور نیست بخاطر اینکه cuda driver همراه درایور انویدیا نصب میشوه و ورژن آن هم بعد از چک کردن دستور nvidia-smi مشخص هستش.دقت کنید که تا به اینجا ما یک سرور لینوکسی ابونتو داریم که فقط انویدیا درایور رو روی اون نصب کردیم که همراه اون درایور کودا هم نصب شده اما هنوز کودا تولکیت که بالاتر توضیح دادیم رو نصب نکردیم.کاربرد NVCCدر واقع nvcc کامپایلر انویدیا کودا هستش و اگر کودا تولکیت روی سیستم ما نصب باشه میتونیم با استفاده از دستور  nvcc –version چک کنیم.تعریف CUDNNاین کتابخونه برای کار های شبکه های عصبی عمیق با استفاده از GPU استفاده میشه و میشه ازش در چارچوب‌های یادگیری ماشینی پیشرفته، مانند TensorFlow Google، PyTorch و غیره استفاده کرد.تفاوت CUDA DRIVER LIBRARY و CUDA RUNTIME LIBRARYکتابخانه CUDA (درایور): با درایور NVIDIA نصب شده و برای برنامه نویسی سطح پایین CUDA در نظر گرفته شده.shared library name : libcuda.soheader file : cuda.hکتابخانه CUDA (Runtime): کتابخانه CUDA Runtime با NVIDIA CUDA Toolkit نصب شده است و برای برنامه نویسی CUDA سطح بالا در نظر گرفته شده.shared library name : libcudart.soheader file : cuda_runtime.hدر حالی که CUDA Driver API و Runtime API عملکردهای مشترکی دارند، در بیشتر سناریوها، استفاده از CUDA Runtime API برای حل مشکل کافیه و کد بسیار ساده‌تر هستش.استفاده از GPU تحت داکر(DOCKER)برای استفاده از GPU تحت داکر فقط نیاز به نصب NVIDIA-DRIVER و NVIDIA CONTAINER RUNTIME هست, هیچ نیازی به نصب CUDA TOOLKIT نیستش.برای اجرای کانتینر های داکری طوری که بتونن از GPU استفاده کننن از فلگ GPUS --ALL استفاده میکنیم و برای اینکار حتما باید NVIDIA CONTAINER RUNTIME نصب باشه.به نسخه Docker خود با docker -v توجه کنید. نسخه های قبل از 19.03 به nvidia-docker2 و فلگ runtime=nvidia نیاز دارن. در نسخه های بعد از 19.03، از بسته nvidia-container-toolkit و فلگ GPUS --ALL. کاربرد NVIDIA-CONTAINER-RUNTIMEیک کانتینر رانتایم اگاه از وجود GPU هستش که کاملا با OCI های مورد استفاده از در داکر و بقیه کانتینر انجین ها سازگار هستش که کار ساختن برنامه های GPU با استفاده از داکر رو راحت تر میکنهاجرا و تست کانتینر هابرای استفاده از داکر ایمیج تنسرفلو به شکلی که از GPU بتونه استفاده کنه باید ۳ تا مورد روی سیستم هاست نصب باشهانویدیا درایورداکرانویدیا داکر ساپورتنصب انویدیا ساپورت برای داکر (nvidia-docker2/nvidia-container-runtime)distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
&amp;&amp; curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
&amp;&amp; curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | \
sed &#039;s#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g&#039; | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt-get update
sudo apt-get install -y nvidia-docker2
sudo systemctl restart dockerتست دسترسی به GPU با استفاده از دستور NVIDIA-SMI از داخل کانتینر انویدیا کوداsudo docker run --rm --gpus all nvidia/cuda:11.7.0-base-ubuntu22.04 nvidia-smiدقت کنید که فلگ GPUS --ALL اگر انویدیا داکر ساپورت روی سیستم هاست نصب نباشه ارور میدهه و کانتینر اصلا اجرا نمیشود.نصب و کانفیگ تنسرفلو به کمک داکر و استفاده از GPU:docker pull tensorflow/tensorflow:latest-gpu-jupyter
docker run --gpus all -it --rm tensorflow/tensorflow:latest-gpu \
python -c &amp;quotimport tensorflow as tf; print(tf.reduce_sum(tf.random.normal([1000, 1000])))&amp;quotبررسی اینکه آیا کانتینر تنسرفلو به GPU دسترسی داره یا نه:tf.config.list_physical_devices(&#039;GPU&#039;)
gpu_available = tf.test.is_gpu_available()is_cuda_gpu_available = tf.test.is_gpu_available(cuda_only=True) 
is_cuda_gpu_min = tf.test.is_gpu_available(True, (3,0))</description>
                <category>صادق رئیس کرمی</category>
                <author>صادق رئیس کرمی</author>
                <pubDate>Mon, 19 Sep 2022 13:24:20 +0430</pubDate>
            </item>
            </channel>
</rss>