The Debugging Diaries
88 subscribers
63 photos
47 videos
33 files
73 links
گوشه‌ای برای یادداشت و ثبت مطالب مربوط به پایتون، یادگیری عمیق و هوش و هر چی که مربوط به تکنولوژی باشه.
加入频道
Forwarded from DLeX: AI Python (NaviD DariYa)
حتمن با الگوریتم BPE که به منظور توکنایزیشن LLM استفاده می شه آشنایی دارید. این الگوریتم byte-level که اولین بار بعد از انتشار مقاله Language Models are Unsupervided Multitask Learners مشهور شد. GPT-2 Paper
@ai_python
این مهم هم زمان با انتشار GPT-2 بود.
امروزه همه LLM های مدرن مثل GPT ، Llama و Mistral از این الگوریتم برای Train کردن Tokenizer هاشون استفاده می کنن.
@ai_python
ریپازیتوری که در ادامه قصد معرفی آن در DLeX را داریم، در واقع حاوی کد 2 توکنایزر است که بر اساس BPE هستند.

آخرین کامیتش هم در زمان نوشتن این پست در DLeX مربوط به 51 دقیقه پیش هست :

https://github.com/karpathy/minbpe
Forwarded from Tensorflow(@CVision) ((◕‿◕))
مدل Gemma مدلی سبک از گوگل که بسیار شبیه مدل‌های جدید جِمی‌نای (Gemini) ساخته شده با این تفاوت که‌ اوپن سورس هست و برای استفاده عمومی منتشر شده.
نسخه‌های این مدل ۲ و ۷ میلیارد پارامتری هست و توی تقریبا همه فریم‌ورک‌های معروف کدش رو منتشر کردند.

لینک بلاگ:

https://blog.google/technology/developers/gemma-open-models/?utm_source=tw&utm_medium=social&utm_campaign=gemini24&utm_content=&utm_term=

لینک کگل:
https://www.kaggle.com/models/google/gemma?utm_medium=social&utm_source=twitter&utm_campaign=models-gemmalaunch
Forwarded from School of AI
چگونه از Tensorboard در Google Colab استفاده کنیم؟!

همون‌طور که می‌دونید، Tensorboard ابزاری‌ست که برای به‌تصویرکشیدن متریک‌هایی مثل loss و accuracy در حین آموزش مدل در TensorFlow (و البته PyTorch) و چند مورد دیگه استفاده می‌شه.

برای این کار، هنگام آموزش مدل در تنسورفلو، یک callback به نام tf.keras.callbacks.TensorBoard را به متد train پاس می‌دیم و در پایتورچ، از torch.utils.tensorboard.SummaryWriter استفاده می‌کنیم. اطلاعات لازم در یک پوشه (مثلا /runs/. در پایتورچ) لاگ می‌شن. سپس سرویس TensorBoard که یک نرم‌افزار تحت وب جدا‌ست رو با اجرای دستور tensorboard در ترمینال اجرا کرده و از طریق مرورگر وب (http://localhost:6006) به آن متصل می‌شیم.

اما زمانی که از Google Colab استفاده می‌کنیم، مرورگر ما به ماشین مجازی‌ای که کد روی اون در حال اجراست، دسترسی نداره و چون اون ماشین مجازی، IP معتبر و اختصاصی روی اینترنت نداره، در حالت عادی نمی‌تونیم به سرویس TensorBoard روی اون متصل شیم.

پس راه‌حل چیست؟
پاسخ: باز کردن یک تونل از یک آدرس معتبر اینترنتی به داخل ماشین مجازی و سرویس تنسوربورد

اگه یه دامنه‌ی اختصاصی برای خودتون دارید می‌تونید روی سایت Cloudflare یه اکانت بسازید و اونجا از یک آدرس معتبر یه تونل به ماشینی که می‌خواید باز کنید.
ولی اگه دامین خودتون رو ندارید می‌تونید از Ngrok استفاده کنید.

برای استفاده از Ngrok داخل نوت‌بوک خود در گوگل کولب، اول دو دستور زیر رو اجرا کنید تا Ngrok دانلود و extract شه:

!wget https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-amd64.zip
!unzip -o ngrok-stable-linux-amd64.zip

بعد سرویس تنسوربورد رو با دستور زیر روی پورت ۶۰۰۶ اجرا کنید:

LOGDIR = '/tmp/log'
get_ipython().system_raw(
'tensorboard --logdir {} --host 0.0.0.0 --port 6006 &'
.format(LOG_DIR)
)

بعد Ngrok رو اجرا کرده و سر تونل رو به پورت ۶۰۰۶ ماشین مجازی وصل کنید

get_ipython().system_raw('./ngrok http 6006 &')

تونل شما آماده‌ست. با اجرای دستور زیر آدرس عمومی دسترسی به تونل رو پیدا کنید و ازون طریق تنسوربورد رو باز کنید:

!curl -s http://localhost:4040/api/tunnels | python3 -c \
"import sys, json; print(json.load(sys.stdin)['tunnels'][0]['public_url'])"
Forwarded from DLeX: AI Python (NaviD DariYa)
لانگ فیوز، یکی از پلت فرم های LLM Engineering است که شامل قابلیت های زیر برای LLM Application ها هست :

👨‍💻 Traces

👨‍💻 Evals

👨‍💻 Prompt Management

👨‍💻 Metrics

حال، به تازگی، این پلت فرم اپن سورس با Llama Index هم Integrate شده.
@ai_python

جهت اطلاعات بیش تر به این پست مراجعه کنید.
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from DLeX: AI Python (NaviD DariYa)
یک رشته توییت عالی که تغییرات معماری ترانسفورمرها رو از سال ۲۰۱۷ تا الان بررسی کرده.
@ai_python

لینک مقاله های آرکایو در رشته توییت قرار داده شده است :

https://twitter.com/Muhtasham9/status/1772469982485438485?t=120YmOd_4f2HS-FnYib3qA&s=19
آقای Andrew Ng جدیدا یک ویدیویی رو منتشر کردن که راجع به Agent ها و Agentic workflow ها صحبت میکنه.Agent ها یکی از مهمترین trend هاست. پیشنهاد میکنم حتما ویدئو را ببینید.

لینک ویدیو

https://youtu.be/sal78ACtGTc

🆔 @data_science_python_and_r
dataexpert.io/questions

سایت برای کوئری زدن و حل کردن تمرینات SQL
#sql
Forwarded from DLeX: AI Python (NaviD DariYa)
کورس جدید دانشگاه استنفورد درباره ترنسفورمرها از امروز آغاز می شه.
@ai_python

شرکت در این کورس از طریق زوم به صورت لایو و آنلاین و رایگان امکان پذیر خواهد بود.
همچنین فایل رکورد شده ۲ هفته بعد از هر جلسه در وب سایت قرار خواهد گرفت.

https://web.stanford.edu/class/cs25/
Forwarded from Mehdi Allahyari
برای فارسی مدل اپن سورس خوب زیاد نیست. مدلهای Nemotron کمپانی Nvidia و AYA از کمپانی Cohere خیلی از زبانها از جمله فارسی را ساپورت میکنن.
این لینک هاشون:
https://developer.nvidia.com/nemotron-3-8b
https://txt.cohere.com/aya/
1954815745_-1493141598.pdf
347.1 KB
پیشنهاد نمودارهای پاور بی آی برای کاربردهای مختلف
Forwarded from DLeX: AI Python (NaviD DariYa)
یک Survey درباره LLM های چند زبانه که به تازگی در اویل همین ماه میلادی منتشر شد و شاید مطالعه ش خالی از لطف نباشه.

@ai_python

از جمله به چالش های پیش روی این مدل های زبانی بزرگ چند زبانه نیز
پرداخته شده است

https://arxiv.org/abs/2404.04925
Forwarded from School of AI
پس از Databricks، این‌بار پژوهش‌گران هوش مصنوعی در شرکت Snowflake دست‌به‌کار شده و مدل زبانی Arctic را با شعار efficiently intelligent and truly open منتشر کرده‌اند.

معماری این مدل، ترنسفورمر ترکیبی (Dense+MoE) با ۱۲۸ خبره و تعداد کل ۴۸۰ میلیارد پارامترست که به کمک یک مکانیزم top-2 gating در هر لحظه فقط ۱۷ میلیارد پارامتر فعال داشته و به‌کمک ۳/۵ تریلیون توکن آموزش دیده‌ست.

این مدل، تسک‌های سازمانی هم‌چون SQL Generation و Coding و Instruction Following را با دقتی در حد Llama3 70B انجام می‌دهد با این‌که هزینه‌ی بسیار کمتری (کم‌تر از ۲ میلیون دلار - حدود یک هفدهم) از لحاظ محاسبات، صرف آموزش آن شده‌ست.

آموزش این مدل ۷ برابر محاسبات کم‌تری نسبت به مدل زبانی شرکت Databriks موسوم به DBRX دارد، بااین‌حال، در ریاضیات، استدلال و فهم زبان بهتر عمل می‌کند.

وزن‌ها و کدهای این مدل تحت لیسانس Apache 2.0 به‌صورت کاملا اوپن-سورس منتشر شده‌ست. همچینین، تمام داده‌ها و بینش‌های پژوهشی نیز در اختیار عموم قرار گرفته‌ست.

این مدل از امروز روی HuggingFace دردسترس است.
https://huggingface.co/Snowflake/snowflake-arctic-instruct
Forwarded from DLeX: AI Python (NaviD DariYa)
این کتابخونه پایتون با استفاده از LLM یک پایپ لاین برای Scraping تهیه می کنه

@ai_python

https://github.com/VinciGit00/Scrapegraph-ai
Forwarded from School of AI
طی روزهای گذشته، بسیاری از دوستان ML Engineer، پرسش‌هایی در مورد روش عملی پیاده‌سازی یک سامانه‌ی RAG داشته‌اند. بنابراین در این نوشتار به‌خلاصه در این مورد
می‌پردازم.

مدل‌های زبانی، در واقع، با نگاه به حجم زیادی داده‌ی متنی، زبان آن متون رو یاد می‌گیرند نه چیز دیگری. بنابراین متن‌های تولید‌شده به‌کمک مدل‌های زبانی، به متن‌هایی که هنگام آموزش مدل مورد استفاده قرار گرفته‌اند، وابسته‌اند و ممکن‌ست از لحاظ زبانی، درست، ولی از نظر صحت، نادرست باشند. بنابراین می‌توان هنگام تولید متن (generation) اطلاعاتی را در اختیار مدل قرار داد (augmentation) که مدل بر اساس آن اطلاعات، به پرسش‌ها پاسخ دهد. با این کار می‌توان دانش مدل زبانی را به‌روز نگه داشت و میزان Context Awareness را در مدل افزایش داد.

این اطلاعات معمولا به‌صورت متن‌هایی داخل فایل‌های بی‌ساختار (Unstructured) مثل فایل‌های PDF و HTML و … قرار دارند. قبل از هر چیز، این فایل‌ها باید جمع‌آوری، ذخیره و به‌روزرسانی شوند. این فایل‌ها را می‌توان روی سامانه‌های فایل (مثلا دیسک سخت یا Google Drive یا …) ذخیره کرد. البته در یک پلتفرم داده‌ای مقیاس‌پذیر، این فایل‌ها معمولا روی Object Storage هایی مانند MINIO یا Amazon S3 ذخیره می‌شوند.

در مرحله‌ی بعد، این اطلاعات باید ETL شوند. یعنی اطلاعات متنی از داخل فایل‌ها استخراج (Extract) شده، به شکل مطلوب تبدیل (Transform) شده (مثلا تگ‌ها و اموجی‌ها حذف شده، متن‌های طولانی، خلاصه و پارتیشن شده و به‌صورت استاندارد درآمده) و در نهایت در جای مناسبی (معمولا یک Vector Database) ذخیره (Load) می‌شوند. برای ETL کردن داده‌ها می‌توان از ابزارهایی مثل https://unstructured.io/platform استفاده کرد.

پایگاه‌های داده‌ی برداری (Vector Databases)، اطلاعات متنی و بردار Embeddig متناظر با آن‌ها را به‌شکلی ذخیره می‌کنند که متن‌هایی که بردار تعبیه‌ی مشابه به هم دارند، به‌سرعت قابل بازیابی (retrieval) باشند. از Google ScaNN یا Meta FAISS یا ابزارهای پیش‌رفته‌تری مانند Weaviate و Pinecone می‌توان به‌عنوان پایگاه داده‌ی برداری استفاده کرد.

برای محاسبه‌ی بردار تعبیه‌ی اطلاعات متنی می‌توان از مدل‌های Embedding آماده و رایگان مثل BAAI/bge-base-en-v1.5 و یا مدل‌های غیررایگان مثل OpenAI Text Embedding استفاده کرد.

هر زمان که کاربر، پرسشی را از چت‌بات می‌پرسد، آن پرسش را از مدل Embedding رد کرده و بردار تعبیه متناظر با آن را پیدا می‌کنیم، سپس به‌کمک این بردار تعبیه، تعداد مشخص و محدودی (مثلا ۵ عدد) از اسناد مشابه و مرتبط از پایگاه داده‌ی برداری، بازیابی (retrieve) شده و در قالب یک پرامپتِ مهندسی‌شده، قبل از پرسش، به مدل زبانی داده می‌شوند. مثلا:


<|start_header_id|>user<|end_header_id|>
You are an assistant for answering questions about IPM.
You are given the extracted parts of a long document and a question. Provide a conversational answer.
If you don't know the answer, just say "I do not know." Don't make up an answer.
Question: {question}
Context: {context}<|eot_id|><|start_header_id|>assistant<|end_header_id|>


مدل زبانی، بسته به نیاز می‌تواند هر مدلی باشد. از مدل‌های اوپن-سورس مثل Meta Llama 3 و Google Gemma و Microsoft Phi-3 و Snowflake Arctic تا مدل‌های تجاری مانند OpenAI GPT-4 …
البته پرامپتی که در بالا آمده مربوط به مدل Meta-Llama-3-8B-Instruct است. بیش‌تر مدل‌های اوپن-سورس روی پلتفرم HuggingFace موجود‌اند و می‌توان به‌سادگی و به‌کمک پکیج Transformers آن‌ها را مورد استفاده قرار داد.

برای اتصال همه‌ی این بخش‌ها به هم، می‌توان از فریم‌ورک‌های مربوط به LLM ها مانند LangChain و یا Llama Index بهره برد.


لینک زیر یک Jupyter Notebook آموزشی است که همه‌ی موارد گفته‌شده در بالا را در عمل و به‌سادگی نشان می‌دهد. اطلاعات متنی موجود در یک فایل PDF به‌کمک ابزار unstructured.io استخراج شده و براساس عنوان‌ها، پارتیشن می‌شوند. سپس این اطلاعات توسط مدل BAAI/bge-base-en-v1.5 به بردار تعبیه تبدیل شده و در Meta FAISS برای بازیابی در آینده، ذخیره می‌شوند. سپس به‌کمک فریم‌ورک LangChain یک پایپلاین RAG طراحی شده و اطلاعات بازیابی‌شده، به مدل زبانی Meta-Llama-3-8B-Instruct که روی HuggingFace قرار دارد، داده‌شده و پاسخ مطلوب تولید شده‌ست.
https://colab.research.google.com/drive/1BJYYyrPVe0_9EGyXqeNyzmVZDrCRZwsg?usp=sharing#scrollTo=zKG6n2JpMtu3
کتابخونه جدید پایتورچ به نام torchtune برای فاین‌تیون کردن LLM ها

با #torchtune میتونین #LLM ها رو فاین تیون کنید: لینک

توی لینک زیر، درمورد Llama3 گفته که شامل بخش‌های معرفی مدل، دسترسی به مدل، فایل‌تیون کردن با تورچ‌تیون، ارزیابی کردن مدل فایل‌تیون‌شدن، جنریت متن، جنریت سریع‌تر با کوانتیزیشن هست:
لینک
#fine_tuning
@silicon_brain | از هوش مصنوعی عقب نمانید
Forwarded from School of AI
واچکانش دانش (Knowledge Distillation) در یادگیری ماشین چیست و چه کاربردی دارد؟

در شرایطی که محدودیت در توان پردازشی داریم (مثلا هنگام توسعه‌ی یک اپلیکیشن موبایل)، دانش موجود در یک مدل یادگیری ماشینِ نسبتا بزرگ، پیچیده و کند (Base Model) را به‌صورت چکیده به یک مدل بسیار ساده‌تر، کوچک‌تر و سریع‌تر (Target Model) منتقل می‌کنیم به‌نحوی که عمل‌کردی مشابه با مدل اصلی را با هزینه‌ی پردازشی بسیار پایین‌تر داشته باشد. به این کار، واچکانش دانش گفته می‌شود.

مثلا فرض کنید در حال توسعه‌ی یک مدل تشخیص شیء (Object Detection) برای پیداکردن ره‌گذرهای پیاده و همچنین خودرو‌های موجود در تصویر یک خیابان هستید. قدیم‌تر، برای انجام این تسک، نیاز به آموزش یک مدل Object Detection برروی یک مجموعه‌داده‌ی برچسب‌خورده داشتیم. امروز اما به‌طورمعمول، از مدل‌های بنیادین (Foundation Models) ازپیش‌آموزش‌دیده استفاده می‌شود که به‌صورت Zero-shot (بدون مشاهده‌ی داده‌ی آموزشی جدید) قابل بهره‌برداری‌اند. مثلا مدل Groundig DINO یا مدل YOLO-World (که به آن‌ها مدل‌های Open Vocabulary Detection هم گفته می‌شود) یک پرامپت متنی از شما دریافت کرده و شیء(های) متناظر با آن را در تصویر شناسایی می‌کند. مثلا کافی‌ست واژه‌هایی هم‌چون vehicle یا sedan car یا bike یا human یا … را به‌عنوان متن ورودی به آن بدهیم و مدل اشیای مورد نظر را تشخیص می‌دهد.
مشکل این‌جاست که مدل‌های Open Vocabulary Detection، دانش نهفته‌ی زیادی در مورد اشیای مختلف (مثلا اسب و هواپیما و …) دارند که در مسئله‌ی ما بی‌اهمیت‌اند. بنابراین، می‌توانیم با ارائه‌ی پرامپت مناسب به مدل Grounding DINO یک مجموعه تصویر را به‌صورت خودکار برچسب زده و از این مجموعه‌داده‌ی حاصل برای آموزش یک مدل شناسایی شیء ساده‌تر مانند YOLO-NAS یا YOLOv8 استفاده کنیم. در این حالت، بخش مور نیاز ما از دانش موجود در Grounding DINO به‌صورت چکیده به مدل YOLO-NAS منتقل (واچکانی) می‌شود و می‌توانیم ازین مدل ساده‌تر در پروژه استفاده کنیم.

برای این کار می‌توانید از پکیج autodistill در پایتون استفاده کنید.


pip install autodistill autodistill-grounding-dino autodistill-yolonas supervision



from autodistill_grounding_dino import GroundingDINO
from autodistill.detection import CaptionOntology
from autodistill_yolonas import YOLONAS


PROMPT = “any vehicle”
CLASS = “vehicle”

IMAGES_DIR_PATH = “path/to/images/dir”
DATASET_PATH = ”path/to/store/dataset”

base_model = GroundingDINO(ontology=CaptionOntology({“PROMPT: CLASS}))
target_model = YOLONAS("yolo_nas_s.pt")

base_model.label(input_folder=IMAGES_DIR_PATH, output_folder=DATASET_PATH")
target_model.train(DATASET_PATH, epochs=20)
pred = target_model.predict(DATASET_PATH+”/train/images/image.jpg", confidence=0.5)
Forwarded from School of AI
یکی دیگه از VLM ها که به‌تازگی توسط HuggingFace معرفی شده، Idefics2 است.

این مدل نیز مانند PaliGemma هشت میلیارد پارامتر دارد.

قابلیت دریافت دنباله‌ای از تصاویر (مثلا تکه‌ای از یک ویدئو) را دارد.

تصاویر با رزولوشن و aspect ratio خودشان پردازش می‌شوند.

قابلیت OCR بسیار خوبی دارد.

تحت مجوز Apache 2.0 منتشر شده و استفاده از آن برای هر منظوری بلامانع‌ست.


بلاگ‌پست معرفی:
https://huggingface.co/blog/idefics2

مقاله:
https://arxiv.org/pdf/2405.02246

مستندات:
https://huggingface.co/docs/transformers/main/en/model_doc/idefics2

فاین‌تیون کردن برای استخراج اطلاعات از قبض:
https://github.com/NielsRogge/Transformers-Tutorials/blob/master/Idefics2/Fine_tune_Idefics2_for_JSON_extraction_use_cases_(PyTorch_Lightning).ipynb
Forwarded from School of AI
شاید شنیده باشید که در هنگام آموزش شبکه‌های عصبی، وقتی اندازه‌ی batch ها را x برابر می‌کنید، به‌تر‌ست نرخ آموزش را نیز x برابر (اگر الگوریتم آموزش SGD است) و یا x√ برابر (اگر الگوریتم آموزش Adam است) کنید.

مثلا در LLM ها که بیش‌تر از الگوریتم آموزشی Adam استفاده می‌شود، اندازه‌ی batch ها را تا حدی که GPU شما خطای Out_Of_Memory نمی‌دهد (به صورت توانی از ۲) افزایش دهید. هر بار که اندازه batch را ۲ برابر می‌کنید، نرخ آموزش را ۱/۴ برابر کنید.

این مقاله‌ی جالب از دانشگاه پرینستون، به کمک معادلات دیفرانسیل تصادفی، الگوی کارایی برای تغییر هایپرپارامترها (مثل learning rate) با افزایش batch size ارائه می‌دهد.

https://www.cs.princeton.edu/~smalladi/blog/2024/01/22/SDEs-ScalingRules/

پی‌نوشت:
معمولا در عمل، نرخ آموزش هرچقدر هم که باشد، در طی epoch ها، ابتدا از 0.1 نرخ آموزش شروع کرده و در ده درصد ابتدایی مسیر آموزش، این نرخ را به‌صورت خطی زیاد کرده تا وقتی ده درصد epoch ها طی شد، به نرخ اصلی رسیده باشیم. از آن‌جا به بعد (۹۰ درصد باقی epoch ها) نرخ آموزش به‌صورت کسینوسی کم می‌شود.
مدل Qwen2 منتشر شد، قبلا راجب مدل اولش گفتم و واقعاً عملکرد خوبی داشت

اما چندتا نکته قابل توجه داره این مدل:
1- عملکرد بهتر از Llama3
2- سایز بزرگتر برای Context-length
3- انتشار مدل در ۵ سایز از 0.5B تا 72B پارامتر
4- و البته از همه مهمتر پشتیبانی از 29 زبان

اما چیزی که بسیار توجه جلب می‌کنه؛ امتیازش روی تست
MMLU-Pro
هست که :
ChatGpt4o : 72.2
Claude 3 Opus : 68.4
Qwen2 : 64.4
Llama3 : 56.2



Blog Post

مدل ۷۲ میلیارد پارامتری دمو هم داره در حال حاضر.


اضافه کنم :
فراموش نکنید Phi3 فقط زبان انگلیسی رو پشتیبانی می‌کنه.
برای همین توی این لیست راجبش چیزی نگفتم.
Forwarded from DLeX: AI Python (NaviD DariYa)