Wysoko wydajny Python. Efektywne programowanie w praktyce - Micha Gorelick, Ian Ozsvald, Hilary Mason [KSIĄŻKA] Błonie

Każdy, kto się zetknął z językiem Python, wie, że jest on prosty i przyjazny dla programistów, ale ma też swoje ograniczenia przy pracy z dużymi wolumenami danych szybko pojawiają się problemy z wydajnością i ze skalowaniem. Niekiedy pomaga mocniejsza konfiguracja sprzętowa, jednak najczęściej …

od 83,02 Najbliżej: 20 km

Liczba ofert: 1

Oferta sklepu

Opis

Każdy, kto się zetknął z językiem Python, wie, że jest on prosty i przyjazny dla programistów, ale ma też swoje ograniczenia przy pracy z dużymi wolumenami danych szybko pojawiają się problemy z wydajnością i ze skalowaniem. Niekiedy pomaga mocniejsza konfiguracja sprzętowa, jednak najczęściej kluczowe jest zastosowanie odpowiednich technik programistycznych i właściwych narzędzi. Dzięki kolejnemu, poszerzonemu i zaktualizowanemu wydaniu tego praktycznego podręcznika zdobędziesz wszechstronną wiedzę o czynnikach wpływających na wydajność kodu. Dowiesz się, jak lokalizować wąskie gardła wydajności i optymalizować kod w programach, które przetwarzają duże wolumeny danych. Lepiej też zrozumiesz zasady implementacji kodu Pythona. W książce poruszono takie zagadnienia jak architektury wielordzeniowe, klastry, skalowanie systemu poza limity pamięci RAM lub z wykorzystaniem procesorów graficznych. Zaprezentowano praktyczne sposoby radzenia sobie z różnymi wyzwaniami, przybliżono również optymalizację kodu Pythona w wielu realnych scenariuszach, w tym na przykład w sytuacji wyodrębniania danych generatywnej sztucznej inteligencji i uczenia maszynowego w wersji produkcyjnej. W książce: narzędzia NumPy i Cython, a także narzędzia profilujące wyszukiwanie wąskich gardeł wykorzystania czasu procesora i pamięci dobór odpowiednich struktur danych, macierze i wektory przyspieszanie sieci neuronowych i obliczeń opartych na procesorach GPU zarządzanie wieloma operacjami obliczeniowymi i operacjami wejścia-wyjścia przetwarzanie współbieżne w klastrze To lektura obowiązkowa dla każdego programisty Pythona! Mikhail Timonin, projektant, Engelhart Spis treści: Słowo wstępne Przedmowa 1. Wydajny kod w Pythonie Podstawowy system komputerowy Jednostki obliczeniowe Jednostki pamięci Warstwy komunikacji Porównanie wyidealizowanego przetwarzania z maszyną wirtualną języka Python Wyidealizowane przetwarzanie Maszyna wirtualna języka Python Dlaczego warto używać Pythona? Jak zostać bardzo wydajnym programistą? Sprawdzone praktyki Optymalizowanie pod kątem zespołu, a nie bloku kodu Wydajny programista pracujący zdalnie Wnioski dotyczące sprawdzonych praktyk korzystania z rozszerzenia Jupyter Notebook Twoja praca Przyszłość języka Python Gdzie się podziała blokada GIL? Czy język Python oferuje kompilator JIT? Podsumowanie 2. Użycie profilowania do znajdowania wąskich gardeł Efektywne profilowanie Wprowadzenie do zbioru Julii Obliczanie pełnego zbioru Julii Proste metody pomiaru czasu - instrukcja print i dekorator Prosty pomiar czasu za pomocą polecenia time systemu Unix Użycie modułu cProfile Użycie narzędzia SnakeViz do wizualizacji danych wyjściowych modułu cProfile Użycie narzędzia line_profiler do pomiarów dotyczących kolejnych wierszy kodu Użycie narzędzia memory_profiler do diagnozowania wykorzystania pamięci Połączenie profilowania procesora i pamięci przy użyciu narzędzia Scalene Introspekcja istniejącego procesu za pomocą narzędzia PySpy Wyświetlanie interaktywnego stosu wywołań na osi czasu za pomocą narzędzia VizTracer Kod bajtowy od podszewki Użycie modułu dis do sprawdzenia kodu bajtowego narzędzia CPython Analizowanie specjalizacji kodu bajtowego za pomocą narzędzia Specialist Różne metody, różna złożoność Testowanie jednostkowe podczas optymalizacji w celu zachowania poprawności Dekorator @profile bez operacji Strategie udanego profilowania kodu Podsumowanie 3. Listy i krotki Bardziej efektywne wyszukiwanie Porównanie list i krotek Listy jako tablice dynamiczne Krotki w roli tablic statycznych Podsumowanie 4. Słowniki i zbiory Jak działają słowniki i zbiory? Wstawianie i pobieranie Usuwanie Zmiana wielkości Funkcje mieszania i entropia Podsumowanie 5. Iteratory i generatory Iteratory dla szeregów nieskończonych Wartościowanie leniwe generatora Podsumowanie 6. Obliczenia macierzowe i wektorowe Wprowadzenie do problemu Czy listy języka Python są wystarczająco dobre? Problemy z przesadną alokacją Fragmentacja pamięci Narzędzie perf Podejmowanie decyzji z wykorzystaniem danych wyjściowych narzędzia perf Wprowadzenie do narzędzia numpy Zastosowanie narzędzia numpy w przypadku problemu dotyczącego dyfuzji Przydziały pamięci i operacje wewnętrzne Optymalizacje selektywne: znajdowanie tego, co wymaga poprawienia Moduł numexpr: przyspieszanie i upraszczanie operacji wewnętrznych Procesory graficzne (GPU) Grafy dynamiczne: PyTorch Szybkość procesorów graficznych i precyzja obliczeń Operacje specyficzne dla procesorów graficznych Podstawowe profilowanie procesora graficznego Elementy wydajności procesorów graficznych Kiedy stosować procesory graficzne? Kwestie wydajności w uczeniu głębokim Przestroga: weryfikowanie "optymalizacji" (biblioteka scipy) Wnioski z optymalizacji macierzy Podsumowanie 7. Pandas, Dask i Polars Pandas Wewnętrzny model biblioteki Pandas Format danych Arrow i biblioteka NumPy Zastosowanie funkcji względem wielu wierszy danych Użycie narzędzia Numba do kompilacji kodu biblioteki NumPy pod kątem biblioteki Pandas Budowanie z wyników częściowych zamiast stosowania konkatenacji Istnieje więcej sposobów niż jeden (i być może szybszych) na wykonanie zadania Porady dotyczące efektywnego projektowania z użyciem biblioteki Pandas Biblioteka Dask obsługująca struktury danych rozproszonych i DataFrame Diagnostyka Przetwarzanie równoległe w bibliotece Pandas z wykorzystaniem biblioteki Dask Przetwarzanie równoległe metody apply w ramach biblioteki Dask z użyciem pakietu Swifter Szybkie struktury DataFrame dzięki bibliotece Polars Podsumowanie 8. Kompilowanie do postaci kodu C Jakie wzrosty szybkości są możliwe? Porównanie kompilatorów JIT i AOT Dlaczego informacje o typie ułatwiają przyspieszenie działania kodu? Użycie kompilatora kodu C Analiza przykładu zbioru Julii Cython Kompilowanie czystego kodu w Pythonie za pomocą narzędzia Cython pyximport Użycie adnotacji kompilatora Cython do analizowania bloku kodu Dodawanie adnotacji typu Cython i numpy Przetwarzanie równoległe rozwiązania na jednym komputerze z wykorzystaniem interfejsu OpenMP Numba PyPy Różnice związane z czyszczeniem pamięci Uruchamianie interpretera PyPy i instalowanie modułów Zestawienie wzrostów szybkości Kiedy stosować poszczególne technologie? Interfejsy funkcji zewnętrznych ctypes cffi f2py Rozszerzenia narzędzia CPython - język C Rozszerzenia narzędzia CPython - język Rust Podsumowanie 9. Asynchroniczne operacje wejścia-wyjścia Wprowadzenie do programowania asynchronicznego Jak działają funkcja async i instrukcja await? Sieciowy przeszukiwacz szeregowy Asynchroniczny przeszukiwacz sieciowy Wspólne obciążenie procesora i urządzeń wejścia-wyjścia Obciążenie procesora przez proces szeregowy Obciążenie procesora przez przetwarzanie wsadowe W pełni asynchroniczne obciążenie procesora Podsumowanie 10. Moduł multiprocessing Moduł multiprocessing Przybliżenie liczby pi przy użyciu metody Monte Carlo Przybliżanie liczby pi za pomocą procesów i wątków Zastosowanie obiektów języka Python Zastępowanie modułu multiprocessing biblioteką Joblib Liczby losowe w systemach przetwarzania równoległego Zastosowanie narzędzia numpy Znajdowanie liczb pierwszych Kolejki zadań roboczych Asynchroniczne dodawanie zadań do kolejki Queue Weryfikowanie liczb pierwszych za pomocą komunikacji międzyprocesowej Rozwiązanie z przetwarzaniem szeregowym Rozwiązanie z prostym obiektem Pool Rozwiązanie z bardzo prostym obiektem Pool dla mniejszych liczb Użycie obiektu Manager.Value jako flagi Użycie systemu Redis jako flagi Użycie obiektu RawValue jako flagi Użycie modułu mmap jako flagi Użycie modułu mmap do odtworzenia flagi Współużytkowanie danych narzędzia numpy za pomocą modułu multiprocessing Synchronizowanie dostępu do zmiennych i plików Blokowanie plików Blokowanie obiektu Value Podsumowanie 11. Klastry i kolejki zadań Zalety klastrowania Wady klastrowania Strata o wartości 462 milionów dolarów na giełdzie Wall Street z powodu kiepskiej strategii aktualizacji klastra 24-godzinny przestój usługi Skype w skali globalnej Typowe projekty klastrowe Metoda rozpoczęcia tworzenia rozwiązania klastrowego Sposoby na uniknięcie kłopotów podczas korzystania z klastrów Dwa rozwiązania klastrowe Użycie modułu IPython Parallel do obsługi badań Użycie brokera komunikatów pod kątem efektywności klastra Inne warte uwagi narzędzia klastrowania Docker Wydajność Dockera Zalety Dockera Podsumowanie 12. Mniejsze wykorzystanie pamięci RAM Obiekty typów podstawowych są kosztowne Moduł array zużywa mniej pamięci do przechowywania wielu obiektów typu podstawowego Mniejsze zużycie pamięci RAM w bibliotece NumPy dzięki narzędziu NumExpr Analiza wykorzystania pamięci RAM w kolekcji Bajty i obiekty Unicode Efektywne przechowywanie zbiorów tekstowych w pamięci RAM Zastosowanie metod dla 11 milionów tokenów Modelowanie większej ilości tekstu za pomocą narzędzia FeatureHasher biblioteki scikit-learn Wprowadzenie do narzędzi DictVectorizer i FeatureHasher Porównanie narzędzi DictVectorizer i FeatureHasher w wypadku rzeczywistego problemu Macierze rzadkie biblioteki SciPy Wskazówki dotyczące mniejszego wykorzystania pamięci RAM Probabilistyczne struktury danych Obliczenia o bardzo dużym stopniu przybliżenia z wykorzystaniem jednobajtowego licznika Morrisa Wartości k-minimum Filtry Blooma Licznik LogLog Praktyczny przykład Podsumowanie 13. Rady specjalistów z branży Projektowanie algorytmu uczenia maszynowego o dużej wydajności Przyglądanie się danym Dedykowane narzędzia analityczne Stosowanie odpowiednich metryk ewaluacji Klasyczne metody naukowe: badania oparte na hipotezach Wykorzystanie w dziennikarstwie obliczeń o dużej wydajności Still Loading Małe prędkości i szybka iteracja Rady z branży reasekuracji cybernetycznej Miej jasną wizję problemu i wymagań dotyczących realizacji Nie lekceważ znaczenia wiedzy eksperckiej Proaktywna ochrona przed złymi danymi Zarządzanie narastającym długiem technicznym Twórz narzędzia rozszerzające procesy oparte na pracy ludzi Podsumowanie Zastosowanie języka Python w finansach ilościowych Metoda wektoryzacji Uproszczone maszyny stanów Projektowanie pod kątem wydajności Utrzymywanie elastyczności w celu osiągnięcia dużej wydajności Twoje największe ograniczenie to Twój własny czas Przesuwanie słupków bramki Nowe perspektywy Rozpoczynanie nowego projektu Wartość dobrych danych Usprawnianie potoków inżynierii cech za pomocą biblioteki Feature-engine (2020) Inżynieria cech w przypadku uczenia maszynowego Trudne zadanie wdrażania potoków inżynierii cech Wykorzystanie możliwości bibliotek open source języka Python Biblioteka Feature-engine usprawnia budowanie i wdrażanie potoków inżynierii cech Ułatwienie adaptacji nowego pakietu open source Projektowanie, utrzymywanie i zachęcanie do uczestnictwa w rozwoju bibliotek open source Bardzo wydajne zespoły danologów (2020) Ile to potrwa? Poznawanie i planowanie Zarządzanie oczekiwaniami i dostarczeniem produktu Numba (2020) Prosty przykład Najlepsze praktyki i zalecenia Uzyskiwanie pomocy Optymalizowanie a myślenie (2020) Technika głębokiego uczenia prezentowana przez firmę RadimRehurek.com (2014) Strzał w dziesiątkę Rady dotyczące optymalizacji Podsumowanie Analiza serwisu społecznościowego o dużej skali w firmie Smesh (2014) Rola języka Python w firmie Smesh Platforma Dopasowywanie łańcuchów w czasie rzeczywistym z dużą wydajnością Raportowanie, monitorowanie, debugowanie i wdrażanie

Specyfikacja

Podstawowe informacje

Autor
  • Micha Gorelick, Ian Ozsvald, Hilary Mason
Wydawnictwo
  • Helion
Okładka
  • Miękka
Rok wydania
  • 2026
Ilość stron
  • 488
Tematyka
  • Programowanie
  • Projektowanie
ISBN
  • 9788328931244