[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"me":3,"catalog:tr:ai-engineer\u002Faipy-gpu-memory-management":4,"config":193},null,{"field_key":5,"field_name":6,"seniority":7,"topic_key":8,"topic_name":9,"spec_key":7,"spec_name":7,"locale":10,"cell_total":11,"field_total":12,"seniorities":13,"topics":17,"specs":97,"samples":108},"ai-engineer","AI Engineer","","aipy-gpu-memory-management","Aipy Gpu Memory Management","tr",75,2025,[14,15,16],"junior","mid","senior",[18,21,24,27,30,33,36,39,42,45,46,49,52,55,58,61,64,67,70,73,76,79,82,85,88,91,94],{"key":19,"name":20,"count":11},"agents-tool-use","Agents Tool Use",{"key":22,"name":23,"count":11},"aimlops-deployment-strategies-ml","Aimlops Deployment Strategies Ml",{"key":25,"name":26,"count":11},"aimlops-experiment-tracking-reproducibility","Aimlops Experiment Tracking Reproducibility",{"key":28,"name":29,"count":11},"aimlops-feature-store-data-versioning","Aimlops Feature Store Data Versioning",{"key":31,"name":32,"count":11},"aimlops-ml-cicd-pipelines","Aimlops Ml Cicd Pipelines",{"key":34,"name":35,"count":11},"aimlops-model-monitoring-drift-detection","Aimlops Model Monitoring Drift Detection",{"key":37,"name":38,"count":11},"aimlops-model-versioning-registry","Aimlops Model Versioning Registry",{"key":40,"name":41,"count":11},"aipy-async-concurrency-ml-serving","Aipy Async Concurrency Ml Serving",{"key":43,"name":44,"count":11},"aipy-data-pipeline-dataloader","Aipy Data Pipeline Dataloader",{"key":8,"name":9,"count":11},{"key":47,"name":48,"count":11},"aipy-numpy-vectorization-broadcasting","Aipy Numpy Vectorization Broadcasting",{"key":50,"name":51,"count":11},"aipy-python-ml-packaging-environments","Aipy Python Ml Packaging Environments",{"key":53,"name":54,"count":11},"aipy-tensor-ops-autograd","Aipy Tensor Ops Autograd",{"key":56,"name":57,"count":11},"embeddings-vector-search","Embeddings Vector Search",{"key":59,"name":60,"count":11},"evaluation-testing","Evaluation Testing",{"key":62,"name":63,"count":11},"fine-tuning-adaptation","Fine Tuning Adaptation",{"key":65,"name":66,"count":11},"inference-serving","Inference Serving",{"key":68,"name":69,"count":11},"llm-fundamentals","Llm Fundamentals",{"key":71,"name":72,"count":11},"prompt-engineering","Prompt Engineering",{"key":74,"name":75,"count":11},"rag-chunking-indexing","Rag Chunking Indexing",{"key":77,"name":78,"count":11},"rag-embeddings-similarity","Rag Embeddings Similarity",{"key":80,"name":81,"count":11},"rag-evaluation","Rag Evaluation",{"key":83,"name":84,"count":11},"rag-generation-context","Rag Generation Context",{"key":86,"name":87,"count":11},"rag-reranking-fusion","Rag Reranking Fusion",{"key":89,"name":90,"count":11},"rag-retrieval","Rag Retrieval",{"key":92,"name":93,"count":11},"rag-retrieval-search","Rag Retrieval Search",{"key":95,"name":96,"count":11},"safety-guardrails","Safety Guardrails",[98,102,105],{"key":99,"name":100,"count":101},"llm-rag","LLM\u002FRAG",450,{"key":103,"name":104,"count":101},"mlops","MLOps",{"key":106,"name":107,"count":101},"python","Python",[109,127,141,154,167,180],{"id":110,"topic":9,"difficulty":111,"body":112,"options":113,"correct_key":118,"explanation":126},"019f9407-fc8c-7c49-8c2f-2b70d5499b03",1,"Bir PyTorch eğitim script'i `CUDA out of memory` hatası verdiğinde, bu hata en doğrudan neyi gösterir?",[114,117,120,123],{"key":115,"text":116},"a","Python süreci GPU belleğinde değil, normal (host) RAM'de yer tükenmiştir.",{"key":118,"text":119},"b","GPU, bir tensor veya operasyon için istenen device bellek bloğunu tahsis edemedi.",{"key":121,"text":122},"c","CUDA sürücü sürümü, kurulu PyTorch derlemesiyle uyumsuzdur. Sürücü uyumsuzlukları da başlangıçta bildirildiği için bu kulağa makul gelebilir, ama ifade ve bağlam bir tahsis hatasından farklıdır.",{"key":124,"text":125},"d","Diskteki model ağırlık dosyası bozuktur ve yüklenemedi.","`CUDA out of memory`, CUDA bellek tahsis edicisi bir GPU device bellek isteğini karşılayamadığında ortaya çıkar; çünkü GPU belleği zaten başka tensorlarla (ağırlıklar, aktivasyonlar, gradyanlar, optimizer state, cache'lenmiş bloklar) doludur. (a) host-RAM hatasını anlatır, ki bu farklı bir exception fırlatır. (c) ve (d), farklı hata mesajları üreten ilgisiz arıza türlerini (sürücü uyumsuzluğu, bozuk checkpoint) anlatır.",{"id":128,"topic":9,"difficulty":129,"body":130,"options":131,"correct_key":115,"explanation":140},"019f9407-fc94-7736-bf16-64bd3a21a1ec",2,"Bir ekip bir görüntü sınıflandırıcı eğitiyor ve `batch_size`'ı 32'den 128'e çıkardıklarında, başka her şey aynıyken `CUDA out of memory` hatası alıyor. Bunun en olası nedeni nedir?",[132,134,136,138],{"key":115,"text":133},"Aktivasyon belleği batch size ile kabaca doğrusal ölçeklenir, bu yüzden 4 kat büyük bir batch kabaca 4 kat daha fazla aktivasyon belleği gerektirir.",{"key":118,"text":135},"Daha büyük batch boyutları, PyTorch'u model ağırlıklarını daha yüksek hassasiyetli bir formatta saklamaya zorlar. Ekipler bazen bu açıklamaya yönelir çünkü hassasiyet ve bellek ikisi de bir tensorun 'ne kadar büyük' olduğuyla ilgili gibi görünür.",{"key":121,"text":137},"Optimizer, batch'teki her örnek için modelin ayrı bir kopyasını oluşturur.",{"key":124,"text":139},"Batch size yalnızca epoch başına kaç gradyan güncellemesi olduğunu etkiler, belleği değil.","Çoğu mimaride, katman başına aktivasyonlar batch'teki her örnek için ayrı saklanır, bu yüzden toplam aktivasyon belleği batch size ile kabaca doğrusal büyürken, modelin ağırlıklarının kullandığı bellek sabit kalır. (b) ve (c), batch size'ın belleği nasıl etkilediğini yansıtmayan mekanizmalar uyduruyor. (d) yanlıştır çünkü batch size doğrudan bellek baskısını etkiler, sadece güncelleme sıklığını değil.",{"id":142,"topic":9,"difficulty":129,"body":143,"options":144,"correct_key":121,"explanation":153},"019f9407-fc96-7441-85e4-2897d21c15ba","Bir `CUDA out of memory` hatasından sonra bir geliştirici, altta yatan sorunu çözmeyi umarak `torch.cuda.empty_cache()` çağırıyor ve aynı batch size ile tekrar deniyor. Gerçekte ne olur?",[145,147,149,151],{"key":115,"text":146},"Sürece ayrılan toplam GPU belleğini kalıcı olarak artırır.",{"key":118,"text":148},"Şu anda Python değişkenleri tarafından referans edilen tensorların hâlâ tuttuğu belleği serbest bırakır. Bu doğru olsaydı aslında tehlikeli olurdu, çünkü çalışan bir hesaplamayı sessizce bozardı; bu çağrının yaptığı şey bu değildir.",{"key":121,"text":150},"Şu anda kullanılmayan, cache'lenmiş bellek bloklarını CUDA sürücüsüne geri verir, ama hâlâ kullanımda olan belleği serbest bırakmaz, bu yüzden aynı OOM tekrar edebilir.",{"key":124,"text":152},"GPU üzerindeki tüm tensorları, bellek ayak izlerini azaltmak için sıkıştırır.","`empty_cache()`, yalnızca PyTorch'un caching allocator'ının tuttuğu ama şu anda kullanmadığı bellek bloklarını CUDA sürücüsüne geri verir; canlı tensorlar tarafından hâlâ referans edilen belleğe dokunamaz ve yeni fiziksel bellek eklemez. Batch gerçekten GPU'nun sahip olduğundan daha fazla belleğe ihtiyaç duyuyorsa, aynı hata tekrar oluşur. (a) ve (d), bu çağrının sahip olmadığı yetenekleri anlatıyor. (b), onu canlı, referans edilen belleği serbest bırakıyormuş gibi yanlış tarif ediyor, ki bu doğruluğu bozardı.",{"id":155,"topic":9,"difficulty":111,"body":156,"options":157,"correct_key":115,"explanation":166},"019f9407-fc97-7e50-8dbd-0f54814e1208","Bir modeli tam fp32 yerine fp16 veya bf16 mixed precision ile eğitirken, ağırlık ve aktivasyon tensorlarını saklamak için gereken bellek kabaca nasıl değişir?",[158,160,162,164],{"key":115,"text":159},"Kabaca yarıya iner, çünkü her değer artık 4 byte yerine 2 byte kullanır.",{"key":118,"text":161},"Kabaca ikiye katlanır, çünkü her orijinal sayıyı temsil etmek için artık iki değer gerekir.",{"key":121,"text":163},"Tam olarak aynı kalır, çünkü hassasiyet yalnızca sayısal doğruluğu etkiler, depolama boyutunu değil.",{"key":124,"text":165},"Yalnızca batch size'a bağlıdır, kullanılan sayısal formata değil. Bellek takibinin sayısal formatın byte genişliği yerine hesaplama hızına bağlı olduğu varsayılırsa bu sezgisel gelebilir.","fp16 ve bf16, fp32'nin 4 byte'ına karşılık değer başına 2 byte kullanır, bu yüzden bu formatlarda saklanan tensorlar, aynı tensora fp32'de kıyasla belleklerini kabaca yarıya indirir. (b) yönü tersine çeviriyor. (c) ve (d), sayısal formatın depolama boyutunu etkilediğini inkar ediyor, ki bu bu dtype'ların tanımıyla çelişir.",{"id":168,"topic":9,"difficulty":129,"body":169,"options":170,"correct_key":124,"explanation":179},"019f9407-fc9e-70bb-bd04-73f471992e95","Backward pass sırasında daha önce GPU belleği tükenen bir modelde gradient checkpointing etkinleştiriliyor. Bu teknik hangi trade-off'u yapar?",[171,173,175,177],{"key":115,"text":172},"Daha düşük nihai doğruluk pahasına gereken eğitim adımı sayısını azaltır.",{"key":118,"text":174},"Modelin katmanlarının bir kısmını kalıcı olarak silerek belleği azaltır. Budama, bellek tasarrufu sağlayan bir teknikle karıştırılırsa bu makul görünebilir, ama checkpointing hiçbir zaman katman kaldırmaz.",{"key":121,"text":176},"Tüm aktivasyonları GPU belleği yerine host RAM'de saklayarak belleği azaltır.",{"key":124,"text":178},"Çoğu ara aktivasyonu saklamayarak, bunun yerine backward pass sırasında son saklanan checkpoint'ten yeniden hesaplayarak belleği azaltır; bunun bedeli ekstra hesaplama süresidir.","Gradient checkpointing, çoğu forward-pass aktivasyonunu saklamaktan kaçınır; backpropagation sırasında bu aktivasyonları son saklanan checkpoint'ten yeniden hesaplar, ekstra forward-pass hesaplamasını daha düşük tepe bellek ile takas eder. (a) ve (b), checkpointing'in yapmadığı ilgisiz veya yıkıcı değişiklikleri anlatıyor. (c) bunu farklı bir teknik olan CPU\u002Faktivasyon offloading ile karıştırıyor.",{"id":181,"topic":9,"difficulty":129,"body":182,"options":183,"correct_key":118,"explanation":192},"019f9407-fc9f-7b89-bd89-cfed834e20a5","GPU belleği bağlamında 'memory fragmentation' (bellek parçalanması) neyi ifade eder?",[184,186,188,190],{"key":115,"text":185},"GPU'nun toplam bellek kapasitesinin birden çok çip arasında fiziksel olarak bölünmesini. Fiziksel çip düzeni gerçek bir donanım detayıdır, ama allocator'ın boş ve kullanılan bellek bölgelerini nasıl takip ettiğiyle ilgisizdir.",{"key":118,"text":187},"Boş belleğin birçok küçük, bitişik olmayan blok halinde bulunmasını; bu yüzden toplam boş bellek yeterli olsa bile yeterince büyük tek bir tahsis başarısız olabilir.",{"key":121,"text":189},"Bir modelin ağırlıklarının dağıtık eğitim için parçalara (shard) bölünmesini.",{"key":124,"text":191},"Tensor değerlerinin, tekrarlanan fp16 yuvarlamaları nedeniyle kademeli olarak bozulmasını.","Fragmentation, bellek zaman içinde serbest bırakılıp tahsis edildikçe boş alanın küçük, bitişik olmayan parçalar halinde dağılmasıyla oluşur; toplamları yeterince büyük olsa bile hiçbir tek parça yeni büyük bir tahsis için yeterli olmayabilir. (a) ve (c), ilgisiz donanım\u002Fparalellik kavramlarını anlatıyor. (d) bir bellek düzeni sorunu değil, sayısal hassasiyet kaymasını anlatıyor.",{"fields":194,"seniorities":372,"interview_shapes":373,"locales":378,"oauth":380,"question_count":383,"coach_enabled":384,"jd_match_enabled":384},[195,218,238,255,279,286,305,324,346,353,359,366],{"key":196,"name_tr":197,"name_en":197,"sort":111,"specializations":198},"backend","Backend",[199,202,205,206,209,212,215],{"key":200,"name":201,"field":196},"general","Genel",{"key":203,"name":204,"field":196},"go","Go",{"key":106,"name":107,"field":196},{"key":207,"name":208,"field":196},"java","Java",{"key":210,"name":211,"field":196},"csharp","C#\u002F.NET",{"key":213,"name":214,"field":196},"nodejs","Node.js",{"key":216,"name":217,"field":196},"php","PHP",{"key":219,"name_tr":220,"name_en":220,"sort":129,"specializations":221},"frontend","Frontend",[222,223,226,229,232,235],{"key":200,"name":201,"field":219},{"key":224,"name":225,"field":219},"javascript","JavaScript",{"key":227,"name":228,"field":219},"typescript","TypeScript",{"key":230,"name":231,"field":219},"react","React",{"key":233,"name":234,"field":219},"vue","Vue",{"key":236,"name":237,"field":219},"angular","Angular",{"key":239,"name_tr":240,"name_en":240,"sort":241,"specializations":242},"fullstack","Fullstack",3,[243,244,245,246,247,248,249,250,251,252,253,254],{"key":200,"name":201,"field":239},{"key":203,"name":204,"field":196},{"key":106,"name":107,"field":196},{"key":207,"name":208,"field":196},{"key":210,"name":211,"field":196},{"key":213,"name":214,"field":196},{"key":216,"name":217,"field":196},{"key":224,"name":225,"field":219},{"key":227,"name":228,"field":219},{"key":230,"name":231,"field":219},{"key":233,"name":234,"field":219},{"key":236,"name":237,"field":219},{"key":256,"name_tr":257,"name_en":257,"sort":258,"specializations":259},"devops-cloud","DevOps \u002F Cloud",4,[260,261,264,267,270,273,276],{"key":200,"name":201,"field":256},{"key":262,"name":263,"field":256},"aws","AWS",{"key":265,"name":266,"field":256},"gcp","GCP",{"key":268,"name":269,"field":256},"azure","Azure",{"key":271,"name":272,"field":256},"kubernetes","Kubernetes",{"key":274,"name":275,"field":256},"terraform","Terraform",{"key":277,"name":278,"field":256},"linux","Linux",{"key":5,"name_tr":6,"name_en":6,"sort":280,"specializations":281},5,[282,283,284,285],{"key":200,"name":201,"field":5},{"key":106,"name":107,"field":5},{"key":99,"name":100,"field":5},{"key":103,"name":104,"field":5},{"key":287,"name_tr":288,"name_en":289,"sort":290,"specializations":291},"database","Veritabanı","Database",6,[292,293,296,299,302],{"key":200,"name":201,"field":287},{"key":294,"name":295,"field":287},"postgresql","PostgreSQL",{"key":297,"name":298,"field":287},"mysql","MySQL",{"key":300,"name":301,"field":287},"mongodb","MongoDB",{"key":303,"name":304,"field":287},"redis","Redis",{"key":306,"name_tr":307,"name_en":308,"sort":309,"specializations":310},"mobile","Mobil","Mobile",7,[311,312,315,318,321],{"key":200,"name":201,"field":306},{"key":313,"name":314,"field":306},"ios-swift","iOS (Swift)",{"key":316,"name":317,"field":306},"android-kotlin","Android (Kotlin)",{"key":319,"name":320,"field":306},"flutter","Flutter",{"key":322,"name":323,"field":306},"react-native","React Native",{"key":325,"name_tr":326,"name_en":327,"sort":328,"specializations":329},"security","Güvenlik","Security",8,[330,331,334,337,340,343],{"key":200,"name":201,"field":325},{"key":332,"name":333,"field":325},"appsec","AppSec",{"key":335,"name":336,"field":325},"offensive-pentest","Offensive \u002F Pentest",{"key":338,"name":339,"field":325},"cloud-security","Cloud Security",{"key":341,"name":342,"field":325},"devsecops","DevSecOps",{"key":344,"name":345,"field":325},"blue-team-incident","Blue Team \u002F Incident",{"key":347,"name_tr":348,"name_en":349,"sort":350,"specializations":351},"qa-test-automation","QA \u002F Test Otomasyonu","QA \u002F Test Automation",9,[352],{"key":200,"name":201,"field":347},{"key":354,"name_tr":355,"name_en":355,"sort":356,"specializations":357},"data-engineer","Data Engineer",10,[358],{"key":200,"name":201,"field":354},{"key":360,"name_tr":361,"name_en":362,"sort":363,"specializations":364},"game-dev","Oyun Geliştirme","Game Development",11,[365],{"key":200,"name":201,"field":360},{"key":367,"name_tr":368,"name_en":368,"sort":369,"specializations":370},"ml-engineer","ML Engineer",12,[371],{"key":200,"name":201,"field":367},[14,15,16],{"junior":374,"mid":376,"senior":377},{"questions":375,"median_sec":3},20,{"questions":375,"median_sec":3},{"questions":375,"median_sec":3},[10,379],"en",[381,382],"google","github",21750,true]