Войти в систему

Home
    - Создать дневник
    - Написать в дневник
       - Подробный режим

LJ.Rossia.org
    - Новости сайта
    - Общие настройки
    - Sitemap
    - Оплата
    - ljr-fif

Редактировать...
    - Настройки
    - Список друзей
    - Дневник
    - Картинки
    - Пароль
    - Вид дневника

Сообщества

Настроить S2

Помощь
    - Забыли пароль?
    - FAQ
    - Тех. поддержка



Пишет Misha Verbitsky ([info]tiphareth)
@ 2020-05-28 23:02:00


Previous Entry  Add to memories!  Tell a Friend!  Next Entry
Настроение: sick
Музыка:Kraftwerk - Das Model Live 1982
Entry tags:covid

as buggy as Kenya
Офигенно
https://github.com/mrc-ide/covid-sim
https://streetwiseprofessor.com/code-violation-other-than-that-how-was-the-play-mrs-lincoln/
https://lockdownsceptics.org/code-review-of-fergusons-model/
Математический биолог Нил Фергюсон из Империала больше
всего прославился тем, что на каждую эпидемию
выдавал прогнозы, которые были преувеличены,
самое малое, в 20 раз. Так, например, он предсказал
массовый мор от свиного гриппа в 2009-м, с 60,000
жертвами, и требовал карантина. В реальности
от свиного гриппа погибло 457 человек.

В феврале-марте этого профессора выдвинули
главным экспертом по ковиду от людей с хорошими твиттерами
из The Guardian и Financial Times. Британскому правительству
пришлось через нехочу последовать его указаниям,
то есть тотальному локдауну, с потешными
полицейскими гонками за одинокими прохожими.

О качестве его модели по ковиду легко судить, потому
что Фергюсон предсказал 40,000 смертей от ковида
в Швеции к 1 маю, и 100,000 к июню; реальный
график шведской смертности от ковида выглядит так



и суммарно там будет, видимо, не больше 7000
человек (сейчас 4266).

Что самое смешное, до недавнего времени
сама модель была не опубликована, то есть
исходники программы оставались секретными.
Месяца 2 или 3 Фергюсону выкручивали руки,
требуя публикации, а он отплевывался, но
недавно таки нанял каких-то программеров
из Микрософта, они почистили, улучшили и
выложили его поделие на гитхаб:
https://github.com/mrc-ide/covid-sim/
Немедленно оказалось, что в программе
ошибка на ошибке сидит и погоняет ошибкой же.

Борцы с ковидобесием сей код разобрали,
тыкают в него пальцем и смеются:

https://streetwiseprofessor.com/code-violation-other-than-that-how-was-the-play-mrs-lincoln/
https://lockdownsceptics.org/code-review-of-fergusons-model/
https://lockdownsceptics.org/second-analysis-of-fergusons-model/
https://lockdownsceptics.org/how-convincing-is-imperial-colleges-covid-19-model/
https://twitter.com/SteveBakerHW/status/1258165810629087232
https://www.whatdotheyknow.com/request/software_code_used_for_the_covid
https://www.reddit.com/r/LockdownSkepticism/comments/gesrvr/code_review_of_fergusons_model/

The code that was reviewed in the first-linked article

. . . had been cleaned up! It's not the actual code used
to make the original predictions. Instead, people from
Microsoft spent a month trying to fix it-and it was still
as buggy as Kenya.

The code was originally in C, and then upgraded to
C++. Well, it could be worse. It could have been Cobol or
Fortran-though one of those reviewing the code suggested:
"Much of the code consists of formulas for which no
purpose is given. John Carmack (a legendary video-game
programmer) surmised that some of the code might have been
automatically translated from FORTRAN some years ago."

All in all, this appears to be the epitome of bad modeling
and coding practice. Code that grew like weeds over
years. Code lacking adequate documentation and version
control. Code based on overcomplicated and essentially
untestable models.

But it gets even better! The leader of the Imperial team,
the aforementioned Ferguson, was caught with his pants
down-literally-canoodling with his (married) girlfriend in
violation of the lockdown rules for which HE was largely
responsible.

The model. What it's doing is best described as "SimCity

without the graphics". It attempts to simulate households,
schools, offices, people and their movements, etc. I won't
go further into the underlying assumptions, since that's
well explored elsewhere.

Non-deterministic outputs. Due to bugs, the code can
produce very different results given identical
inputs. They routinely act as if this is unimportant.

The documentation says:

The model is stochastic. Multiple runs with different
seeds should be undertaken to see average behaviour.

"Stochastic" is just a scientific-sounding word for
"random". That's not a problem if the randomness is
intentional pseudo-randomness, i.e. the randomness is
derived from a starting "seed" which is iterated to
produce the random numbers. Such randomness is often used
in Monte Carlo techniques. It's safe because the seed can
be recorded and the same (pseudo-)random numbers produced
from it in future.

Investigation reveals the truth: the code produces
critically different results, even for identical starting
seeds and parameters.

I'll illustrate with a few bugs. In issue 116 a UK "red
team" at Edinburgh University reports that they tried to
use a mode that stores data tables in a more efficient
format for faster loading, and discovered - to their
surprise - that the resulting predictions varied by around
80,000 deaths after 80 days

That mode doesn't change anything about the world being
simulated, so this was obviously a bug.

Imperial advised Edinburgh that the problem goes away if
you run the model in single-threaded mode, like they
do. This means they suggest using only a single CPU core
rather than the many cores that any video game would
successfully use. For a simulation of a country, using
only a single CPU core is obviously a dire problem - as
far from supercomputing as you can get. Nonetheless,
that's how Imperial use the code: they know it breaks when
they try to run it faster. It's clear from reading the
code that in 2014 Imperial tried to make the code use
multiple CPUs to speed it up, but never made it work
reliably. Results that randomly change from run to run are
a common consequence of thread-safety bugs. More
colloquially, these are known as "Heisenbugs".

But Edinburgh came back and reported that - even in
single-threaded mode - they still see the problem. So
Imperial's understanding of the issue is wrong. Finally,
Imperial admit there's a bug by referencing a code change
they've made that fixes it. The explanation given is "It
looks like historically the second pair of seeds had been
used at this point, to make the runs identical regardless
of how the network was made, but that this had been
changed when seed-resetting was implemented". In other
words, in the process of changing the model they made it
non-replicable and never noticed.

Why didn't they notice? Because their code is so deeply
riddled with similar bugs and they struggled so much to
fix them that they got into the habit of simply averaging
the results of multiple runs to cover it up... and
eventually this behaviour became normalised within the
team.

In issue #30, someone reports that the model produces
different outputs depending on what kind of computer it's
run on (regardless of the number of CPUs). Again, the
explanation is that although this new problem "will just
add to the issues" ... "This isn't a problem running the
model in full as it is stochastic anyway".

Undocumented equations. Much of the code consists of
formulas for which no purpose is given. John Carmack (a
legendary video-game programmer) surmised that some of the
code might have been automatically translated from FORTRAN
some years ago.

For example, on line 510 of SetupModel.cpp there is a loop
over all the "places" the simulation knows about. This
code appears to be trying to calculate R0 for
"places". Hotels are excluded during this pass, without
explanation.

Continuing development. Despite being aware of the severe
problems in their code that they "haven't had time" to
fix, the Imperial team continue to add new features; for
instance, the model attempts to simulate the impact of
digital contact tracing apps.

Adding new features to a codebase with this many quality
problems will just compound them and make them worse. If I
saw this in a company I was consulting for I'd immediately
advise them to halt new feature development until thorough
regression testing was in place and code quality had been
improved.

Conclusions. All papers based on this code should be
retracted immediately. Imperial's modelling efforts should
be reset with a new team that isn't under Professor
Ferguson, and which has a commitment to replicable results
with published code from day one.

* * *

Вообще полезный сайт
https://lockdownsceptics.org
Гугл, к сожалению, деиндексирует либо зануляет
пейджранк любому сайту, где высказываются против
коронабесия, поэтому сходу подобные
страницы не найти, надо копаться.

Такие дела
Миша



(Читать комментарии) - (Добавить комментарий)


[info]wasserstrahl
2020-05-29 13:26 (ссылка)
Абсолютное большинство кода для высокопроизводительных исследований пишется на Fortran, C или C++. Просто потому, что когда реально нужна высокая производительность, других вариантов просто нет. Языки, между прочим, вполне современные и развиваются.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]sometimes
2020-05-29 16:01 (ссылка)
Как же вы так можете, эксперт же в треде. Знаток современных языков (в качестве каковых, видимо, выступают go, python и swift).
Но на самом деле интересно, оптимизирующие компиляторы фортрана до сих пор дают выигрыш; но язык все-таки нехорош.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]wasserstrahl
2020-05-29 17:04 (ссылка)
"оптимизирующие компиляторы фортрана до сих пор дают выигрыш"
По сравнению с чем?

"но язык все-таки нехорош"
Почему? :)

(Ответить) (Уровень выше)


(Анонимно)
2020-05-29 18:46 (ссылка)
Охуеть блять.

> Fortran, C или C++
> C или C++
> C или C++

Ты знаешь, вменяемые люди когда подобное в резюме, например, видят (типа, "разработчик С/С++"), то сразу, неглядя на остальное, его в помойку выбрасывают.

Но возвращаясь к теме, слова "несколько узкоспециальных случаев" ты решил проигнорировать, да? Где "высокопроизводительные исследования" и где масса разработчиков? Вот этот говнокодер с коронавирусной моделью, он по-твоему, высокопроизводительный код хотел написать?

(Ответить) (Уровень выше) (Ветвь дискуссии)


(Анонимно)
2020-05-29 21:41 (ссылка)
полыхание пердаков вкументах воистену (sic!)

(Ответить) (Уровень выше)


[info]wasserstrahl
2020-05-30 01:40 (ссылка)
"Ты знаешь, вменяемые люди когда подобное в резюме, например, видят (типа, "разработчик С/С++"), то сразу, неглядя на остальное, его в помойку выбрасывают"

Ты знаешь, мир немножко шире твоей галеры с макаками.

"Но возвращаясь к теме, слова "несколько узкоспециальных случаев" ты решил проигнорировать, да?"

А это и есть узкоспециализированный случай.

"Где "высокопроизводительные исследования" и где масса разработчиков?"

А где ты тут массу видишь? Масса разработчиков веслает, клепая какой-нибудь очередной глючный интернет-магазин или анальный зонд для ведроида. Собственно, в том-то и проблема, что подобный код зачастую вынуждены писать люди, которые в первую очередь специалисты в предметной области, а уже потом -- немножко программисты (зачастую плохие).

"Вот этот говнокодер с коронавирусной моделью, он по-твоему, высокопроизводительный код хотел написать?

А у него выхода нет. Статью читал? Там модель на всю страну, с учетом каждого города, села, больницы и последнего задрыпанного готеля. Ты себе представляешь обсчет всего этого счастья какими-нибудь скриптами от смузихлебов?

(Ответить) (Уровень выше) (Ветвь дискуссии)


(Анонимно)
2020-05-30 05:24 (ссылка)
>>А у него выхода нет. Статью читал?
Им из за ошибок пришлось на одном ядре все запускать, охуенный выигрыш производительности. Реально они писали на этом говне исключительно в силу привычки, потому что не умеют и не хотят учиться Фортран из питона запускать.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]wasserstrahl
2020-05-30 13:42 (ссылка)
"Им из за ошибок пришлось на одном ядре все запускать, охуенный выигрыш производительности"
Ну потому что хреновые из них программисты.

"Реально они писали на этом говне исключительно в силу привычки, потому что не умеют и не хотят учиться Фортран из питона запускать."

Чтобы запускать фортран из питона, надо сначала что-то написать на фортране, а потом его запустить.

(Ответить) (Уровень выше) (Ветвь дискуссии)


(Анонимно)
2020-06-01 21:19 (ссылка)
> Ну потому что хреновые из них программисты.

Ты вообще рефлексируешь или просто по инерции пытаешься противоречить любому реплаю в Интернете? Я с самого начала именно это и написал: проблема Си и Фортрана в том, что _бОльшую_ часть кода на них пишут крайне хуевые программисты; не инженеры, а учоные на хую верчоные, если тебе так больше нравится.

При чем тут "смузихлебство" (мгновенные маркер ебанариев, плохо представляющих индустрию за пределами псевдодилеммы "JS vs. C")? Есть современные небыдло-технологии как специально ориентированные на моделирование процессов так и general purpose, но деды-пердуны, которые программирования касались в последний раз в рамках институтской программы 80-х годов прошлого века, не в курсе и по привычке ебошат однопоточную недетерминистскую лапшу на сишечке.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]wasserstrahl
2020-06-02 00:09 (ссылка)
"Ты вообще рефлексируешь или просто по инерции пытаешься противоречить любому реплаю в Интернете?"
Обсуждаю, как бы.

"Я с самого начала именно это и написал: проблема Си и Фортрана в том, что _бОльшую_ часть кода на них пишут крайне хуевые программисты; не инженеры, а учоные на хую верчоные, если тебе так больше нравится."
Это не проблема Си и Фортрана. Это проблема хуевых программистов. Переход на "современные языки"(тм) никак не отменит того факта, что они хуевые программисты, поэтому хуевый код лучше не станет. Ну, окей, сегфолтов, может, меньше станет, все-таки Си жесток, но наговнокодить можно и без прямой работы с указателями.

"При чем тут "смузихлебство" (мгновенные маркер ебанариев, плохо представляющих индустрию за пределами псевдодилеммы "JS vs. C")?"
Сказал аноним, пользующийся термином "кодомакаки".

"Есть современные небыдло-технологии как специально ориентированные на моделирование процессов так и general purpose, но деды-пердуны, которые программирования касались в последний раз в рамках институтской программы 80-х годов прошлого века, не в курсе и по привычке ебошат однопоточную недетерминистскую лапшу на сишечке."
Давай ты расскажешь это "дедам-пердунам", которые на Фортране пишут что-нибудь типа этого, а?

Знаток, блин, индустрии.

(Ответить) (Уровень выше)


[info]wasserstrahl
2020-05-30 13:43 (ссылка)
Ты сам-то на фортране писал когда-нибудь?

(Ответить) (Уровень выше)


(Читать комментарии) -