Md Daily
#ام_دی_کورس خب ما قراره از یه LLM به نام Llama 2 استفاده کنیم اما این مدل زبانی چه مزیتی برای ما داره و دقیقا چیکار میکنه ؟ یک مدل زبانی متن باز هستش که توسط متا/فیسبوک به عنوان جایگزینی برای مدلهای متنبسته مانند GPT و PaLM ایجاد شده و بر خلاف بقیه ی…
#ام_دی_کورس
پلتفرم Huggingface مجموعه ایه که برای توسعه و به اشتراک گذاری مدل های هوش مصنوعی و ابزارهای مربوط به پردازش زبان طبیعی فعالیت می کنه.
این شرکت در سال 2016 تأسیس شد. هدف اونها ایجاد یک اکوسیستم باز برای توسعه هوش مصنوعی بود که همه بتونند ازش استفاده کنند.
شما در این پلتفرم میتونید به مخزن بزرگی از مدل های تمرین داده شده، دیتاست ها و ابزارهای مربوط به پردازش زبان طبیعی دسترسی پیدا کنید.
لینک های مفید:
https://huggingface.co/
https://huggingface.co/openlm-research
https://en.wikipedia.org/wiki/Hugging_Face
ادامه در پست بعدی...
🆔 @MdDaily
پلتفرم Huggingface مجموعه ایه که برای توسعه و به اشتراک گذاری مدل های هوش مصنوعی و ابزارهای مربوط به پردازش زبان طبیعی فعالیت می کنه.
این شرکت در سال 2016 تأسیس شد. هدف اونها ایجاد یک اکوسیستم باز برای توسعه هوش مصنوعی بود که همه بتونند ازش استفاده کنند.
شما در این پلتفرم میتونید به مخزن بزرگی از مدل های تمرین داده شده، دیتاست ها و ابزارهای مربوط به پردازش زبان طبیعی دسترسی پیدا کنید.
لینک های مفید:
https://huggingface.co/
https://huggingface.co/openlm-research
https://en.wikipedia.org/wiki/Hugging_Face
ادامه در پست بعدی...
🆔 @MdDaily
Md Daily
#ام_دی_کورس پلتفرم Huggingface مجموعه ایه که برای توسعه و به اشتراک گذاری مدل های هوش مصنوعی و ابزارهای مربوط به پردازش زبان طبیعی فعالیت می کنه. این شرکت در سال 2016 تأسیس شد. هدف اونها ایجاد یک اکوسیستم باز برای توسعه هوش مصنوعی بود که همه بتونند ازش…
#ام_دی_کورس
خب بریم برای ادامه ی آموزش و شروع کار به کد نویسی :)
به دلیل اینکه LLM ها نیاز به منابع زیادی برای پردازش دارند ما قرار از colab استفاده کنیم که به ما یه محیط توسعه میده با run time های متفاوت.
وارد سایت https://colab.google/ بشید و روی دکمه ی New Note book کلیک کنید
ادامه در پست بعدی...
🆔 @MdDaily
خب بریم برای ادامه ی آموزش و شروع کار به کد نویسی :)
به دلیل اینکه LLM ها نیاز به منابع زیادی برای پردازش دارند ما قرار از colab استفاده کنیم که به ما یه محیط توسعه میده با run time های متفاوت.
وارد سایت https://colab.google/ بشید و روی دکمه ی New Note book کلیک کنید
ادامه در پست بعدی...
🆔 @MdDaily
This media is not supported in your browser
VIEW IN TELEGRAM
#ام_دی_کورس
خب توی این ویدیو با هم یک note book جدید می سازیم و اسمش را تغییر میدیم. در نهایت با تغییر rune time از CPU به T4 GPU و اجرای کامند های لینوکس میزان منابعی که در اختیار داریم رو میبینیم.
برای فان هم چنتا کامند لینوکس رو تست میگریم
ادامه در پست بعدی...
🆔 @MdDaily
خب توی این ویدیو با هم یک note book جدید می سازیم و اسمش را تغییر میدیم. در نهایت با تغییر rune time از CPU به T4 GPU و اجرای کامند های لینوکس میزان منابعی که در اختیار داریم رو میبینیم.
برای فان هم چنتا کامند لینوکس رو تست میگریم
ادامه در پست بعدی...
🆔 @MdDaily
This media is not supported in your browser
VIEW IN TELEGRAM
#ام_دی_کورس
خب توی این ویدیو پیش نیاز هامون را نصب میکنیم و مدلمون رو از Huggingface دانلود میکنیم. به دلیل اینکه Llama 2 برای دسترسی نیاز به ثبت نام داره ما از open_llama_7b استفاده می کنیم که نیاز به ثبت نام نداره.
لینک مدل در Huggingface
لینک مدل در گیت هاب
کد های استفاده شده در این ویدیو:
Install prerequisites:
🆔 @MdDaily
خب توی این ویدیو پیش نیاز هامون را نصب میکنیم و مدلمون رو از Huggingface دانلود میکنیم. به دلیل اینکه Llama 2 برای دسترسی نیاز به ثبت نام داره ما از open_llama_7b استفاده می کنیم که نیاز به ثبت نام نداره.
لینک مدل در Huggingface
لینک مدل در گیت هاب
کد های استفاده شده در این ویدیو:
Install prerequisites:
!pip install -q transformers einops accelerate langchain bitsandbytes
!pip install sentencepiece
Import packages:from langchain import HuggingFacePipelineDownload model:
from transformers import AutoTokenizer, pipeline
from transformers import LlamaTokenizer, LlamaForCausalLM
import torch
model_path = "openlm-research/open_llama_7b" # Hugging Face
tokenizer = LlamaTokenizer.from_pretrained(model_path)
model = LlamaForCausalLM.from_pretrained(
model_path, torch_dtype=torch.float16, device_map='auto',
)
ادامه در پست بعدی... 🆔 @MdDaily
#ام_دی_کورس
بعد از اینکه مدلمون دانلود شد وقت اینه که llm امون رو اماده کنیم.
کد استفاده شده در تصویر :
LLM:
🆔 @MdDaily
بعد از اینکه مدلمون دانلود شد وقت اینه که llm امون رو اماده کنیم.
کد استفاده شده در تصویر :
LLM:
pipeline = pipeline(
"text-generation", #task
model=model,
tokenizer=tokenizer,
torch_dtype=torch.bfloat16,
trust_remote_code=True,
device_map="auto",
max_length=1000,
do_sample=True,
top_k=10,
num_return_sequences=1,
eos_token_id=tokenizer.eos_token_id
)
llm = HuggingFacePipeline(pipeline = pipeline, model_kwargs = {'temperature':0})
توضیحات کد در پست بعدی...🆔 @MdDaily
Md Daily
#ام_دی_کورس بعد از اینکه مدلمون دانلود شد وقت اینه که llm امون رو اماده کنیم. کد استفاده شده در تصویر : LLM: pipeline = pipeline( "text-generation", #task model=model, tokenizer=tokenizer, torch_dtype=torch.bfloat16, trust_remote_code=True…
#ام_دی_کورس
این کد پایتون یک pipeline از کتابخانه HuggingFace را ایجاد میکند که میتواند متن را تولید کند 📝. برای این کار، این کد چند چیز را تعریف میکند:
-تابع pipeline: این یک تابع است که یک شیء pipeline را برمیگرداند. این شیء میتواند وظایف مختلفی را انجام دهد، مثلاً تحلیل احساسات، تشخیص نامهای propoer، و غیره. در اینجا، وظیفهای که ما مشخص کردهایم "text-generation" است، یعنی تولید متن 📝.
- شیء model: این یک شیء است که نشان میدهد که چه مدل عصبی را برای pipeline استفاده میکنیم. در اینجا، ما model را به عنوان یک پارامتر به تابع pipeline دادهایم. model ممکن است یک نام باشد (مثلاً "gpt-2") یا یک شیء که قبلاً بارگذاری شده باشد.
- شیء tokenizer: این یک شیء است که نشان میدهد که چگونه متن را به توکنهای کوچکتر تقسیم کنیم. توکنها واحدهای پایهای هستند که مدل عصبی با آنها کار میکند. tokenizer هم مثل model ممکن است یک نام باشد (مثلاً "bert-base-cased") یا یک شیء که قبلاً بارگذاری شده باشد.
- پارامتر torch_dtype: این یک پارامتر است که نشان میدهد که چه نوع دادهای را برای tensor های torch استفاده کنیم. tensor ها ساختارهای دادهای هستند که در جبر خطی و شبکههای عصبی به کار میروند. torch_dtype ممکن است float32، float64، bfloat16 و غیره باشد. در اینجا، ما bfloat16 را انتخاب کردهایم که نوع دادهای با دقت پایین است ولی سرعت بالاتر و حافظه کمتری نسبت به float32 دارد.
- پارامتر trust_remote_code: این یک پارامتر بولین (True/False) است که نشان میدهد آیا pipeline به صورت خودکار برخورد با remote code را فعال کند یا خیر. remote code به این معناست که pipeline بتواند برخی از قسمتهای خود را از منابع دور دست (مثلاً اینترنت) در زمان اجرا درآورده و به آنها دسترس پیدا کند. در اینجا، ما trust_remote_code را True قرار دادهایم، چون ممکن است model و tokenizer را از منابع دور دست بخواهید.
- پارامتر device_map: این یک پارامتر است که نشان میدهد pipeline بر روی چه دستگاه (device) ای اجرا شود. دستگاه ممکن است CPU یا GPU باشد. در اینجا، ما device_map را "auto" قرار دادهایم، چون میخواهیم pipeline خودش تشخیص دهد که چه دستگاهی را استفاده کند.
- پارامتر max_length: این یک پارامتر است که نشان میدهد حداکثر چند توکن را برای تولید متن در نظر بگیریم. در اینجا، ما max_length را 1000 قرار دادهایم، چون میخواهیم متنهای طولانی تولید کنیم.
- پارامتر do_sample: این یک پارامتر بولین (True/False) است که نشان میدهد آیا pipeline به صورت تصادفی (random) متن را تولید کند یا خیر. در اینجا، ما do_sample را True قرار دادهایم، چون میخواهیم متنهای خلاقانه و جذاب تولید کنیم.
- پارامتر top_k: این یک پارامتر است که نشان میدهد pipeline در هر مرحله از تولید متن، چند توکن با بالاترین احتمال را در نظر بگیرد. در اینجا، ما top_k را 10 قرار دادهایم، چون میخواهیم pipeline از تعداد مناسبی از توکنهای محتمل انتخاب کند.
- پارامتر num_return_sequences: این یک پارامتر است که نشان میدهد pipeline چند جمله (sequence) را به عنوان خروجی برگرداند. در اینجا، ما num_return_sequences را 1 قرار دادهایم، چون فقط یک جمله را میخواهیم.
- پارامتر eos_token_id: این یک پارامتر است که نشان میدهد pipeline با چه توکنی (token) بفهمد که جمله به پایان رسیده است. در اینجا، ما eos_token_id را با tokenizer.eos_token_id قرار دادهایم، که نشان دهنده توکن پایان جمله (end of sentence) در tokenizer است.
شیء llm: این یک شیء است که نشان دهنده pipeline هست ولی با بعضی تفاوتها. llm نام کلاس HuggingFacePipeline را دارد و pipeline را به عنوان پارامتر خود در نظر میگیرد. llm همچنین model_kwargs را به عنوان پارامتر خود دارد که شامل temperature است. temperature یک عدد بین صفر و یک است که نشان میدهد pipeline چقدر خلاق و جسور باشد. هرچه temperature بالاتر باشد، pipeline جسورتر و خلاقانهتر عمل میکند ولی همچنین خطای بالاتر هم دارد. در اینجا، ما temperature را صفر قرار دادهایم، چون میخواهیم pipeline به صورت حساب شده و منطقی عمل کند.
🆔 @MdDaily
این کد پایتون یک pipeline از کتابخانه HuggingFace را ایجاد میکند که میتواند متن را تولید کند 📝. برای این کار، این کد چند چیز را تعریف میکند:
-تابع pipeline: این یک تابع است که یک شیء pipeline را برمیگرداند. این شیء میتواند وظایف مختلفی را انجام دهد، مثلاً تحلیل احساسات، تشخیص نامهای propoer، و غیره. در اینجا، وظیفهای که ما مشخص کردهایم "text-generation" است، یعنی تولید متن 📝.
- شیء model: این یک شیء است که نشان میدهد که چه مدل عصبی را برای pipeline استفاده میکنیم. در اینجا، ما model را به عنوان یک پارامتر به تابع pipeline دادهایم. model ممکن است یک نام باشد (مثلاً "gpt-2") یا یک شیء که قبلاً بارگذاری شده باشد.
- شیء tokenizer: این یک شیء است که نشان میدهد که چگونه متن را به توکنهای کوچکتر تقسیم کنیم. توکنها واحدهای پایهای هستند که مدل عصبی با آنها کار میکند. tokenizer هم مثل model ممکن است یک نام باشد (مثلاً "bert-base-cased") یا یک شیء که قبلاً بارگذاری شده باشد.
- پارامتر torch_dtype: این یک پارامتر است که نشان میدهد که چه نوع دادهای را برای tensor های torch استفاده کنیم. tensor ها ساختارهای دادهای هستند که در جبر خطی و شبکههای عصبی به کار میروند. torch_dtype ممکن است float32، float64، bfloat16 و غیره باشد. در اینجا، ما bfloat16 را انتخاب کردهایم که نوع دادهای با دقت پایین است ولی سرعت بالاتر و حافظه کمتری نسبت به float32 دارد.
- پارامتر trust_remote_code: این یک پارامتر بولین (True/False) است که نشان میدهد آیا pipeline به صورت خودکار برخورد با remote code را فعال کند یا خیر. remote code به این معناست که pipeline بتواند برخی از قسمتهای خود را از منابع دور دست (مثلاً اینترنت) در زمان اجرا درآورده و به آنها دسترس پیدا کند. در اینجا، ما trust_remote_code را True قرار دادهایم، چون ممکن است model و tokenizer را از منابع دور دست بخواهید.
- پارامتر device_map: این یک پارامتر است که نشان میدهد pipeline بر روی چه دستگاه (device) ای اجرا شود. دستگاه ممکن است CPU یا GPU باشد. در اینجا، ما device_map را "auto" قرار دادهایم، چون میخواهیم pipeline خودش تشخیص دهد که چه دستگاهی را استفاده کند.
- پارامتر max_length: این یک پارامتر است که نشان میدهد حداکثر چند توکن را برای تولید متن در نظر بگیریم. در اینجا، ما max_length را 1000 قرار دادهایم، چون میخواهیم متنهای طولانی تولید کنیم.
- پارامتر do_sample: این یک پارامتر بولین (True/False) است که نشان میدهد آیا pipeline به صورت تصادفی (random) متن را تولید کند یا خیر. در اینجا، ما do_sample را True قرار دادهایم، چون میخواهیم متنهای خلاقانه و جذاب تولید کنیم.
- پارامتر top_k: این یک پارامتر است که نشان میدهد pipeline در هر مرحله از تولید متن، چند توکن با بالاترین احتمال را در نظر بگیرد. در اینجا، ما top_k را 10 قرار دادهایم، چون میخواهیم pipeline از تعداد مناسبی از توکنهای محتمل انتخاب کند.
- پارامتر num_return_sequences: این یک پارامتر است که نشان میدهد pipeline چند جمله (sequence) را به عنوان خروجی برگرداند. در اینجا، ما num_return_sequences را 1 قرار دادهایم، چون فقط یک جمله را میخواهیم.
- پارامتر eos_token_id: این یک پارامتر است که نشان میدهد pipeline با چه توکنی (token) بفهمد که جمله به پایان رسیده است. در اینجا، ما eos_token_id را با tokenizer.eos_token_id قرار دادهایم، که نشان دهنده توکن پایان جمله (end of sentence) در tokenizer است.
شیء llm: این یک شیء است که نشان دهنده pipeline هست ولی با بعضی تفاوتها. llm نام کلاس HuggingFacePipeline را دارد و pipeline را به عنوان پارامتر خود در نظر میگیرد. llm همچنین model_kwargs را به عنوان پارامتر خود دارد که شامل temperature است. temperature یک عدد بین صفر و یک است که نشان میدهد pipeline چقدر خلاق و جسور باشد. هرچه temperature بالاتر باشد، pipeline جسورتر و خلاقانهتر عمل میکند ولی همچنین خطای بالاتر هم دارد. در اینجا، ما temperature را صفر قرار دادهایم، چون میخواهیم pipeline به صورت حساب شده و منطقی عمل کند.
🆔 @MdDaily
#ام_دی_کورس
وقتشه که خروجیه تا این بخش از کار را باهم ببنیم.
الان که llm امون آمادس و طبق توضیحات پست قبلی پارامتر هاشم مشخص شدند به این شکل میتونیم ازش سوال بپرسیم :
> تقریبا برای تولید هر ریسپانس 33 ثانیه زمان نیاز داره. که با اختصاص منابع گرافیکی بیشتر میشه این مدت رو کمتر کرد. برای این کار باید اشتراک google colab pro را داشته باشد.
کد استفاده شده در تصویر:
Let's Have Some Fun
وقتشه که خروجیه تا این بخش از کار را باهم ببنیم.
الان که llm امون آمادس و طبق توضیحات پست قبلی پارامتر هاشم مشخص شدند به این شکل میتونیم ازش سوال بپرسیم :
llm("متن یا سوال شما")
همانطور که توی تصویر می بینید من ازش چنتا سوال فان پرسیدم که بریم توی پست بعد جواب هاشا ببینم. > تقریبا برای تولید هر ریسپانس 33 ثانیه زمان نیاز داره. که با اختصاص منابع گرافیکی بیشتر میشه این مدت رو کمتر کرد. برای این کار باید اشتراک google colab pro را داشته باشد.
کد استفاده شده در تصویر:
Let's Have Some Fun
q1 = llm("What do you know About IRAN?")
q2 = llm("What is Python programming langgue?")
q3 = llm("Write a hello world in python")
q4 = llm("Write a hello world in Golang")
🆔 @MdDaily❤2
#ام_دی_کورس
جوابی که که برای ما تولید کرد، خیلی طولانیه، جملاتش بهم ارتباط ندارند و دقیقا چیزی که ما میخوایم نیست.
خب اینجاس که ما از longchain و دانش prompt engineering استفاده میکنیم تا به مدل بفهمونیم باید چطوری رفتار کنه، چطوری جواب بده و وظیفش چیه
ادامه در پست بعدی...
🆔 @MdDaily
جوابی که که برای ما تولید کرد، خیلی طولانیه، جملاتش بهم ارتباط ندارند و دقیقا چیزی که ما میخوایم نیست.
خب اینجاس که ما از longchain و دانش prompt engineering استفاده میکنیم تا به مدل بفهمونیم باید چطوری رفتار کنه، چطوری جواب بده و وظیفش چیه
ادامه در پست بعدی...
🆔 @MdDaily
❤1
#ام_دی_کورس
با استفاده از PromptTemplate به مدلمون میگیم قراره یه متنی بهش بدیم و وظیفت اینکه نکات کلیدی متن را برای ما استخراج کنی .
کد استفاده شده در تصویر:
🆔 @MdDaily
با استفاده از PromptTemplate به مدلمون میگیم قراره یه متنی بهش بدیم و وظیفت اینکه نکات کلیدی متن را برای ما استخراج کنی .
کد استفاده شده در تصویر:
from langchain import PromptTemplate, LLMChain
template = """
Write a concise summary of the following text delimited by triple backquotes.
Return your response in bullet points which covers the key points of the text.
```{text}```
BULLET POINT SUMMARY:
"""
prompt = PromptTemplate(template=template, input_variables=["text"])
llm_chain = LLMChain(prompt=prompt, llm=llm)
ادامه در پست بعدی...🆔 @MdDaily
#ام_دی_کورس
و تمام :)
توی تصویر ها میتونید ورودی متن ها و خروجی های تولید شده را ببینید
کد کامل در ریپوی Md Course
🆔 @MdDaily
و تمام :)
توی تصویر ها میتونید ورودی متن ها و خروجی های تولید شده را ببینید
کد کامل در ریپوی Md Course
🆔 @MdDaily
#ام_دی_کورس
هدف اصلی این آموزش این بود که اگه شما قصد این رو دارید که وارد دنیای یادگیری ماشین و هوش مصنوعی بشید یا به این موارد علاقه دارید یه ایده ی کلی از اینکه چیز ها چطوری کار میکنند و پشت صحنه چه خبره به شما بده .
توی این آموزش از open llama7b استفاده شد که به منابع زیادی برای پردازش نیاز داره و بهینه نشده. ولی برای آموزش من این مدل را انتخاب کردم تا نشون بدم llm چطوری کار میکنه و شما با این روش میتونید llm های دیگه توی Huggingface رو امتحان کنید.
خب تا اینجا با مفاهیم آشنا شدیم و تقریبا فهمیدیم اون پشت صحنه چه خبره. الان وقتشه بریم سراغ LLM هایی که هم بهینه شدند و هم سریع ریسپانس تولید میکنند و حتی میتونید روی سیستم شخصی خودتونم ازشون استفاده کنید اگر منابع خوبی دارید.
ادامه ی توضیحات در پست بعدی :)
🆔 @MdDaily
هدف اصلی این آموزش این بود که اگه شما قصد این رو دارید که وارد دنیای یادگیری ماشین و هوش مصنوعی بشید یا به این موارد علاقه دارید یه ایده ی کلی از اینکه چیز ها چطوری کار میکنند و پشت صحنه چه خبره به شما بده .
توی این آموزش از open llama7b استفاده شد که به منابع زیادی برای پردازش نیاز داره و بهینه نشده. ولی برای آموزش من این مدل را انتخاب کردم تا نشون بدم llm چطوری کار میکنه و شما با این روش میتونید llm های دیگه توی Huggingface رو امتحان کنید.
خب تا اینجا با مفاهیم آشنا شدیم و تقریبا فهمیدیم اون پشت صحنه چه خبره. الان وقتشه بریم سراغ LLM هایی که هم بهینه شدند و هم سریع ریسپانس تولید میکنند و حتی میتونید روی سیستم شخصی خودتونم ازشون استفاده کنید اگر منابع خوبی دارید.
ادامه ی توضیحات در پست بعدی :)
🆔 @MdDaily
This media is not supported in your browser
VIEW IN TELEGRAM
#ام_دی_کورس
توی این ویدیو با استفاده ریپوی https://github.com/camenduru/text-generation-webui-colab و LLM های بهینه شده. باهم یک محیط وب میاریم بالا که از منابع google colab استفاده میکنه و
بهش چالش برنامه نویسی میدیم تا ببینم چطوری حل میکنه و ازش میخوایم برامون متن خلاصه کنه
شما هم میتونید مثل این ویدیو بقیه ی مدل های موجود توی ریپو رو تست کنید. پرامپت هاشون رو تغییر بدید. در محیط وبی که در اختیار دارید مدل رو تمرین بدید و چیز های جدید یاد بگیرید .
اگه دوست داشتید llama-2-7b رو روی سیستم خودتون امتحان کنید از این مقاله استفاده کنید.
این آموزش به اتمام رسید. اگه سوالی داشتید کامنت ها باز هستند.
🆔 @MdDaily
توی این ویدیو با استفاده ریپوی https://github.com/camenduru/text-generation-webui-colab و LLM های بهینه شده. باهم یک محیط وب میاریم بالا که از منابع google colab استفاده میکنه و
llama-2-7b-chat-GPTQ-4bit (4bit) رو تست میکنیم که مناسب چت بات ها هست و بهینه شده تا از منابع کمتری استفاده کنه بهش چالش برنامه نویسی میدیم تا ببینم چطوری حل میکنه و ازش میخوایم برامون متن خلاصه کنه
شما هم میتونید مثل این ویدیو بقیه ی مدل های موجود توی ریپو رو تست کنید. پرامپت هاشون رو تغییر بدید. در محیط وبی که در اختیار دارید مدل رو تمرین بدید و چیز های جدید یاد بگیرید .
اگه دوست داشتید llama-2-7b رو روی سیستم خودتون امتحان کنید از این مقاله استفاده کنید.
این آموزش به اتمام رسید. اگه سوالی داشتید کامنت ها باز هستند.
🆔 @MdDaily
👍2
This media is not supported in your browser
VIEW IN TELEGRAM
ادرنالین رو از دست ندین 👨🏻💻
یک شبکه عصبی جالب برای برنامه نویسا که نادرستی کد رو به دقت شناسایی می کنه و گزینه هایی برای اصلاح آنها ارائه میده.
useadrenaline.com
<Hounaar>
🆔 @MdDaily
یک شبکه عصبی جالب برای برنامه نویسا که نادرستی کد رو به دقت شناسایی می کنه و گزینه هایی برای اصلاح آنها ارائه میده.
useadrenaline.com
<Hounaar>
🆔 @MdDaily
🔥2👨💻1
در مورد این هک هایی که اتفاق میفته و دیتا شرکتهای بزرگ را میبرند، الزاما همیشه از طریق آسیبپذیری نیست، لذا به نکات زیر توجه فرمایید 🤭
به هاستینگ اعتماد نکنید ( مخصوصا ایرانی )، اینها به فایلهای مشتری دسترسی دارند و اگر چیزه جذابی ببینند احتمال دارد برای خودشون کپی کنند.
یک) اگر یک کسب و کار بزرگی دارید که نیازمند سرور اختصاصیست به هر نحوی که شده از شرکتهای معتبر سرور بگیرید و به این هاست فروشهای داخل زیاد اعتماد نکنید
اگر سایت / دیتا جالبی داشته باشید اینها ممکنه درایو سرور را clone میگیرند یا با KVM وصل میشوند و سورس/دیتا سایت شما را بدزدند.
دو) کد خودتون را محافظت کنید اگر مثلا php است با چیزهایی مثل sourceguardian و ... کدتون را encrypt کنید و حتما کد را روی دامنه قفل کنید که فقط روی دامنه شما و localhost اجرا بشود
سه) سیستم عامل را encrypt کنید که سرویس دهنده توانایی دسترسی به فایلها/دیتابیس شما را نداشته باشد
<Teegra>
🆔 @MdDaily
به هاستینگ اعتماد نکنید ( مخصوصا ایرانی )، اینها به فایلهای مشتری دسترسی دارند و اگر چیزه جذابی ببینند احتمال دارد برای خودشون کپی کنند.
یک) اگر یک کسب و کار بزرگی دارید که نیازمند سرور اختصاصیست به هر نحوی که شده از شرکتهای معتبر سرور بگیرید و به این هاست فروشهای داخل زیاد اعتماد نکنید
اگر سایت / دیتا جالبی داشته باشید اینها ممکنه درایو سرور را clone میگیرند یا با KVM وصل میشوند و سورس/دیتا سایت شما را بدزدند.
دو) کد خودتون را محافظت کنید اگر مثلا php است با چیزهایی مثل sourceguardian و ... کدتون را encrypt کنید و حتما کد را روی دامنه قفل کنید که فقط روی دامنه شما و localhost اجرا بشود
سه) سیستم عامل را encrypt کنید که سرویس دهنده توانایی دسترسی به فایلها/دیتابیس شما را نداشته باشد
<Teegra>
🆔 @MdDaily
👀2👍1🤔1🤯1
اگه برای طراحی اپلیکیشن و محصولتون نیاز به ایده و یه منبع الهام دارید این وب سایت اومده تمام illustration های استفاده شده توی سایتها و اپهای معروف رو دسته بندی شده و با اسکرین شات هاشون گذاشته
https://illustrationsuniverse.com/
🆔 @MdDaily
https://illustrationsuniverse.com/
🆔 @MdDaily
👌3🔥2🗿1
Forwarded from Seyed Mahdi Notes (Seyed Mahdi)
دیروز سوال شد ازم که آیا fast api سریع هست؟
خب در مرحله ی اول که اسمش روشه . اسمش فسته . اگه کند بود اسمشو میزاشتن slow api :)
به نظر من این قضیه و شمارش ریکوئست هایی که هر فریمورک میتونه در ثانیه ریسپانس بده (req/sec) کار باطلی هست
بر فرض ما یه app رو تازه نوشتیم(به هر زبونی و فریمورکی فرقی نمیکنه) توی قدم اول رانش میکنیم!!! نمیریم استرس و لود تست ازش بگیریم که همون اول :/
بعد چندین سال صبر میکنیم تا یوزرای همزمان سایت زیادتر بشن!
بعد ازدیاد جمعیت اولین bottleneck ای که بر میخوریم اینه که اپ کند شده... خب ورکر هاشو زیاد میکنیم. توی پایتون گونیکورن این قضیه رو هندل میکنه
بعد یه مدت وقتی شلوغ تر شدیم میبینیم دیتابیس زیر فشاره. خب قبل اینکه توی این استیت باشید باید کوئری هاتون رو تا جای ممکن بهینه میکردید.
توی این مرحله ۲ تا سولوشن دارید! (دقت کنید که هنوز مهم نیست اپ رو با چی نوشتید:))
- کش کردن: بخشی از دیتای دیتابیس رو کش کنید حالا یا با قابلیتای خود دیتابیس یا ردیس ای چیزی بزارید وسط
- کلاستر کردن دیتابیس: میتونید دیتابیس رو ۳ تا اینستنس ازش بیارید بالا و یا slave و master بزارید و تمام read ها رو بفرسید سمت اسلیو
خب تا اینجا احتمالا بالای ۵۰۰ تا یوزر همزمان دارید! ادامه بدم؟
خب قدم بعد مجدد app کم میاره اگه نمیتونید ترد ها و ورکر هاشو بیشتر از این بالا ببرید ؛ اینجاست که بحث فریمورک ها رو مطرح ...
نه خب سخت در اشتباهید بیام سر قضیه فریمورک و زبان بحث کنم
وقتی شما ۱۰۰۰ تا یوزر همزمان دارید یعنی پولتون از پارو بالا میره
برید ۳ تا سرور دیگه بخرید و بکندتون رو روی اونا هم ران کنید(همزمان ۳ جا) بعد از جایی که خریدید بگید یه نتورک داخلی بین این ۴ سرورتون بزاره . روی سرور ۴ ام haproxy یا nginx بزنید که ترافیک ورودی رو پخش کنه بین این ۳ تا سرور ... ایزی
در راستای این پست ، یکی میگفت: اونایی که وسط حرفاشون کلمات انگلیسی استفاده میکنن خیلی کنسل هستن :))))
خب در مرحله ی اول که اسمش روشه . اسمش فسته . اگه کند بود اسمشو میزاشتن slow api :)
به نظر من این قضیه و شمارش ریکوئست هایی که هر فریمورک میتونه در ثانیه ریسپانس بده (req/sec) کار باطلی هست
بر فرض ما یه app رو تازه نوشتیم(به هر زبونی و فریمورکی فرقی نمیکنه) توی قدم اول رانش میکنیم!!! نمیریم استرس و لود تست ازش بگیریم که همون اول :/
بعد چندین سال صبر میکنیم تا یوزرای همزمان سایت زیادتر بشن!
بعد ازدیاد جمعیت اولین bottleneck ای که بر میخوریم اینه که اپ کند شده... خب ورکر هاشو زیاد میکنیم. توی پایتون گونیکورن این قضیه رو هندل میکنه
بعد یه مدت وقتی شلوغ تر شدیم میبینیم دیتابیس زیر فشاره. خب قبل اینکه توی این استیت باشید باید کوئری هاتون رو تا جای ممکن بهینه میکردید.
توی این مرحله ۲ تا سولوشن دارید! (دقت کنید که هنوز مهم نیست اپ رو با چی نوشتید:))
- کش کردن: بخشی از دیتای دیتابیس رو کش کنید حالا یا با قابلیتای خود دیتابیس یا ردیس ای چیزی بزارید وسط
- کلاستر کردن دیتابیس: میتونید دیتابیس رو ۳ تا اینستنس ازش بیارید بالا و یا slave و master بزارید و تمام read ها رو بفرسید سمت اسلیو
خب تا اینجا احتمالا بالای ۵۰۰ تا یوزر همزمان دارید! ادامه بدم؟
خب قدم بعد مجدد app کم میاره اگه نمیتونید ترد ها و ورکر هاشو بیشتر از این بالا ببرید ؛ اینجاست که بحث فریمورک ها رو مطرح ...
نه خب سخت در اشتباهید بیام سر قضیه فریمورک و زبان بحث کنم
وقتی شما ۱۰۰۰ تا یوزر همزمان دارید یعنی پولتون از پارو بالا میره
برید ۳ تا سرور دیگه بخرید و بکندتون رو روی اونا هم ران کنید(همزمان ۳ جا) بعد از جایی که خریدید بگید یه نتورک داخلی بین این ۴ سرورتون بزاره . روی سرور ۴ ام haproxy یا nginx بزنید که ترافیک ورودی رو پخش کنه بین این ۳ تا سرور ... ایزی
در راستای این پست ، یکی میگفت: اونایی که وسط حرفاشون کلمات انگلیسی استفاده میکنن خیلی کنسل هستن :))))